您好我还是laravel的新手,我在网上搜索了近3个小时这个问题我尝试了很多东西,但它没有用。
所以当我点击那个按钮"批准"我想将值从0更新为1(列的类型为boolean)。 这是我的控制者:
public function approve($id){
$training = Training::find($id);
$training->update(['Approved' =>'1']);
// $training->Approved = 1;
// $training->save();
return redirect('/trainings')->with('success', 'Training Approved');
}
这是页面部分,其中的按钮位于文件夹培训中,名称为" show.blade.php" :
{!!Form::open(['action' => ['TrainingsController@approve',$training->TrainingsID], 'method' => 'POST','class' => 'pull-left'])!!}
{{Form::hidden('_method','PUT')}}
{{Form::submit('Approve',['class' => 'btn btn-success'])}}
{!!Form::close()!!}
和路线(我猜这是我做错的部分):
Route::post('/trainings',['as' =>'trainings.show', 'uses' => 'TrainingsController@approve']);
单击按钮时出现的错误是:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
感谢您的帮助
答案 0 :(得分:1)
由于路线为post
,您应该将表单方法更改为发布:
{{ Form::hidden('_method','POST') }}
或者:
{!! Form::open(['method' => 'post', 'action' => ....
您还需要将id
添加到路径定义中:
Route::post('trainings/{id}', ['as' => 'trainings.show', 'uses' => 'TrainingsController@approve']);
答案 1 :(得分:0)
由于您使用了POST
操作,因此您不需要进行方法欺骗。它仅对PUT
,PATCH
,DELETE
。
您当前的路线定义错误,因为您将trainings/show
与approve
操作相关联。实际上它应该是show
动作。
这是应该工作的代码(未经测试)
class TrainingsController extends Controller
{
public function show(Training $training) // Using Route Model binding here
{
return view('trainings.show', ['training' => $training]);
}
public function approve(Training $training)
{
$training->update(['Approved' => '1']);
return redirect()->route('trainings')->with('success', 'Training Approved'); // if you want to redirect to a list of all trainings and would need an index action
// return redirect()->route('trainings', ['training' => $training])->with('success', 'Training Approved'); // if you want redirect to detail page of this training
}
}
路由/ web.php
Route::post('trainings/{training}/approve', ['as' => 'trainings.approve', 'uses' => 'TrainingsController@approve']);
Route::get('trainings/{training}', ['as' => 'trainings.show', 'uses' => 'TrainingsController@show']);
刀片
{!!Form::open('route' => ['trainings.approve', $training->TrainingsID], 'class' => 'pull-left'])!!}
{{Form::submit('Approve',['class' => 'btn btn-success'])}}
{!!Form::close()!!}
对您的代码的一些评论:
TrainingsID
这样的ID是多余的,因为您已经知道这是培训的ID snake_case
表/属性名称