更新中的Laravel表格请求

发布于 2025-02-09 19:41:09 字数 5113 浏览 0 评论 0原文

大家好,当我创建类别时,我在Laravel中遇到问题,并且我想在此类别中编辑一些细节,它将我重新记录到同一页面,而不是将任何内容发送到数据库,但是当我想编辑类别中的所有详细信息或编辑英语a arbic lang Togather它正在工作,所以为什么在这里开始这么做....

这是一个视图

<form class="form" method="POST" action="/admin/categories/{{$category->route}}/update" enctype="multipart/form-data">
@csrf
{{-- @method('PATCH') --}}
<div class="form-group">
    <div class="label">
        <label for="ArabicName">{{__('admin.CategoryArabicName')}}</label>
        <input type="text" class="form-control" id="ArabicName" name="ArabicName" placeholder="{{__('admin.CategoryArabicName')}}" value="{{$category->getTranslation('title','ar')}}">
        @error('ArabicName')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
    <div class="label">
        <label for="EnglishName">{{__('admin.CategoryEnglishName')}}</label>
        <input type="text" class="form-control" id="EnglishName" name="EnglishName" placeholder="{{__('admin.CategoryEnglishName')}}" value="{{$category->getTranslation('title','en')}}">
        @error('EnglishName')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
</div>
<div class="form-group">
    <div class="label">
        <label for="route">{{__('admin.Route')}}</label>
        <input type="text" class="form-control" id="route" name="route" placeholder="{{__('admin.Route')}}" value="{{$category->route}}">
        @error('route')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
    <div class="label">
        <label for="upload_image">{{__('admin.UploadImage')}}</label>
        <input type="file" class="form-control" accept="image/*" id="upload_image" name="upload_image[]" value="{{$category->image}}" multiple>
        @error('upload_image')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
</div>
<input type="submit" class="submit" value="{{__('admin.Update')}}">

这是一条路线

   Route::group([
             'prefix' => 'admin',
        ],function () {
            Route::group([
                'prefix' => 'categories',
            ],function(){
                Route::post('/{category:route}/update',[CategoriesAdminController::class,'update']);
            });
        });

这是updateCategoryRequest

public function authorize()
{
    return true;
}
/**
 * Get the validation rules that apply to the request.
 *
 * @return array<string, mixed>
 */
public function rules()
{
    return [
        'ArabicName' => 'required|max:255',
        'EnglishName' => 'required|max:255',
        'route' => ['required', Rule::unique('categories', 'route'), 'max:255'],
        'upload_image.*' => 'required|image|max:2048',
    ];
}
public function messages()
{
return [
    'ArabicName.required' => __('validation.required'),
    'EnglishName.required' => __('validation.required'),
    'route.required' => __('validation.required'),
    'route.unique' => __('validation.unique'),
];
}

这是控制器

public function update(UpdateCategoryRequest $request ,Category $category)
{
    if(Category::where('title->ar', request()->ArabicName)->orWhere('title->en', request()->EnglishName)->exists()){
        return redirect()->back()->with('storeError', __('admin.NameIsAlreadyTaken'));
    }
    try {
        $attributes = $request->validated();
        Category::updateCategory($category,$attributes);
        return redirect('/admin/categories')->with('updateSuccess', __('admin.CategoryUpdatedSuccessfully'));
    }catch (\Exception $e) {
        return redirect()->back()->withErrors($e->getMessage());
    }
}

这是模型

public static function updateCategory($category,$attributes){
    $file = array();
    $Newfiles = array();
    if($file = request()->hasFile('upload_image')){
        $imageArray = explode('|',$category->image);
        foreach ($imageArray as $image) {
            Storage::disk('public')->delete($image);
        }
        foreach (request()->file('upload_image') as $file) {
            $fileName = md5(rand(100,1000)) . time() . '.' . strtolower($file->getClientOriginalExtension());
            $folderName = "categories/" . request()->EnglishName;
            $fullUrl = $folderName . '/' . $fileName;
            $file->storeAs($folderName, $fileName , 'public');
            $Newfiles[] = $fullUrl;
        }
    }
    $image = implode('|' , $Newfiles);
    $category->update([
        'image' => $image,
        'title' => ['ar' => $attributes['ArabicName'], 'en' => $attributes['EnglishName']],
        'route' => $attributes['route'],
    ]);

}

注意:我使用Spatie/McMara进行本地化

hello guys I have problem in laravel when I create category and I want to edit some detail in this category it redirct me to same page and not send any thing to database but when I want to edit all details in category or edit english a arbic lang togather it's working so why this happend here ....

this is a view

<form class="form" method="POST" action="/admin/categories/{{$category->route}}/update" enctype="multipart/form-data">
@csrf
{{-- @method('PATCH') --}}
<div class="form-group">
    <div class="label">
        <label for="ArabicName">{{__('admin.CategoryArabicName')}}</label>
        <input type="text" class="form-control" id="ArabicName" name="ArabicName" placeholder="{{__('admin.CategoryArabicName')}}" value="{{$category->getTranslation('title','ar')}}">
        @error('ArabicName')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
    <div class="label">
        <label for="EnglishName">{{__('admin.CategoryEnglishName')}}</label>
        <input type="text" class="form-control" id="EnglishName" name="EnglishName" placeholder="{{__('admin.CategoryEnglishName')}}" value="{{$category->getTranslation('title','en')}}">
        @error('EnglishName')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
</div>
<div class="form-group">
    <div class="label">
        <label for="route">{{__('admin.Route')}}</label>
        <input type="text" class="form-control" id="route" name="route" placeholder="{{__('admin.Route')}}" value="{{$category->route}}">
        @error('route')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
    <div class="label">
        <label for="upload_image">{{__('admin.UploadImage')}}</label>
        <input type="file" class="form-control" accept="image/*" id="upload_image" name="upload_image[]" value="{{$category->image}}" multiple>
        @error('upload_image')
        <span class="error">{{ $message }}</span>
        @enderror
    </div>
</div>
<input type="submit" class="submit" value="{{__('admin.Update')}}">

this is a route

   Route::group([
             'prefix' => 'admin',
        ],function () {
            Route::group([
                'prefix' => 'categories',
            ],function(){
                Route::post('/{category:route}/update',[CategoriesAdminController::class,'update']);
            });
        });

this is a updateCategoryRequest

public function authorize()
{
    return true;
}
/**
 * Get the validation rules that apply to the request.
 *
 * @return array<string, mixed>
 */
public function rules()
{
    return [
        'ArabicName' => 'required|max:255',
        'EnglishName' => 'required|max:255',
        'route' => ['required', Rule::unique('categories', 'route'), 'max:255'],
        'upload_image.*' => 'required|image|max:2048',
    ];
}
public function messages()
{
return [
    'ArabicName.required' => __('validation.required'),
    'EnglishName.required' => __('validation.required'),
    'route.required' => __('validation.required'),
    'route.unique' => __('validation.unique'),
];
}

this is a controller

public function update(UpdateCategoryRequest $request ,Category $category)
{
    if(Category::where('title->ar', request()->ArabicName)->orWhere('title->en', request()->EnglishName)->exists()){
        return redirect()->back()->with('storeError', __('admin.NameIsAlreadyTaken'));
    }
    try {
        $attributes = $request->validated();
        Category::updateCategory($category,$attributes);
        return redirect('/admin/categories')->with('updateSuccess', __('admin.CategoryUpdatedSuccessfully'));
    }catch (\Exception $e) {
        return redirect()->back()->withErrors($e->getMessage());
    }
}

this is a model

public static function updateCategory($category,$attributes){
    $file = array();
    $Newfiles = array();
    if($file = request()->hasFile('upload_image')){
        $imageArray = explode('|',$category->image);
        foreach ($imageArray as $image) {
            Storage::disk('public')->delete($image);
        }
        foreach (request()->file('upload_image') as $file) {
            $fileName = md5(rand(100,1000)) . time() . '.' . strtolower($file->getClientOriginalExtension());
            $folderName = "categories/" . request()->EnglishName;
            $fullUrl = $folderName . '/' . $fileName;
            $file->storeAs($folderName, $fileName , 'public');
            $Newfiles[] = $fullUrl;
        }
    }
    $image = implode('|' , $Newfiles);
    $category->update([
        'image' => $image,
        'title' => ['ar' => $attributes['ArabicName'], 'en' => $attributes['EnglishName']],
        'route' => $attributes['route'],
    ]);

}

Notes: I use spatie/mcmara for localization

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文