Laravel 5.1:如何设置路由以更新记录

3

我正在使用laravel 5.1

我正在使用laravel的路由。

我使用Form/Html进行插入/更新,但在更新记录的路由中遇到了困难。

这是用于重定向到编辑页面的路由(routes.php):

Route::get('/company/edit/{id}','CompanyMasterController@edit');

在我的CompanyMasterController.php文件中

public function edit($id)
   {
      $company = CompanyMasters::find($id);

      return view('companymaster.edit',  compact('company'));
   }

在edit.blade.php中我的动作

{!! Form::model($company,['method' => 'PATCH','action'=>['CompanyMasterController@update','id'=>$company->id]]) !!}

在routes.php中为此操作设置路由

Route::put('/company/update/{id}','CompanyMasterController@update');

我的控制器更新操作。

public function update($id)
   {
        $bookUpdate=Request::all();
        $book=  CompanyMasters::find($id);
        $book->update($bookUpdate);
        return redirect('/company/index');
   }

现在当我点击提交按钮时,它会给我返回:MethodNotAllowedHttpException in RouteCollection.php。我做错了什么吗?

Route::put是正确的,控制器方法也是正确的,但在表单中你忘记选择正确的方法了 - 它应该是'PUT'而不是'PATCH'。 - naneri
1个回答

8

你遇到这个错误的主要原因是因为你将表单设置为使用PATCH方法提交,而你的路由设置为寻找PUT方法。

你有两个最初的选择,一个是在路由文件中与表单有相同的方法,另一个是将你的路由设置为:

Route::match(['put', 'patch'], '/company/update/{id}','CompanyMasterController@update');

以上方法将允许使用两种方式来访问该路由。
另外,您还可以使用route:resource() https://laravel.com/docs/5.2/controllers#restful-resource-controllers
这将处理所有基本的Restful路由。
然后,为了更进一步,您可以在路由文件中添加以下内容:
Route::model('company', 'App\CompanyMasters'); //make sure the namespace is correct if you're not using the standard `App\ModelName`

那么您的资源路由将会像这样:

Route::resource('company', 'CompanyMasterController');

然后在CompanyMasterController中,您的方法可以进行类型提示,例如:

public function edit($id) {...}

Would become:

public function edit(CompanyMaster $company)
{
    return view('companymaster.edit',  compact('company'));
}

显然,如果您不想采用这种方法,那么您也没有必要这样做。希望这可以帮助您!

@Jazz 如果你想进一步进行,我已经更新了答案。很高兴能帮助你! - Rwd
感谢详细的解释。我也尝试这些步骤。 - Dhara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接