Laravel:点击按钮时更新列的值

问题描述 投票:2回答:2

您好,我还是laravel的新手,我在网上搜索了近3个小时关于这个问题我已经尝试了很多东西,但它没有用。

所以基本上我有一个带按钮的页面,当我点击那个按钮“Approve”时我想要将值从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

谢谢您的帮助

php jquery mysql laravel eloquent
2个回答
1
投票

由于路线是post,你应该改变形式方法也发布:

{{ Form::hidden('_method','POST') }}

要么:

{!! Form::open(['method' => 'post', 'action' => ....

您还需要将id添加到路径定义中:

Route::post('trainings/{id}', ['as' => 'trainings.show', 'uses' => 'TrainingsController@approve']);

0
投票

这里你不需要方法欺骗,因为你使用了POST动作。它只对PUTPATCHDELETE有必要。

您当前的路线定义是错误的,因为您将trainings/showapprove动作连接起来。事实上它应该是一个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表/属性名称
© www.soinside.com 2019 - 2024. All rights reserved.