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

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

我正在使用laravel 5.1

我正在使用laravel的路线。

我使用Form/Html进行插入/更新,但卡在更新记录的路由中。

这是route.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');
   }

现在,当我点击提交按钮时,它给了我:

RouteCollection.php中的MethodNotAllowedHttpException

我究竟做错了什么?

php laravel-5.1
1个回答
5
投票

您收到此错误的主要原因是因为您将表单设置为使用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) {...}

会成为:

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

显然,如果你不愿意,你不必采用这种方法。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.