更新中的Laravel表格请求
大家好,当我创建类别时,我在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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论