Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单

Posted

技术标签:

【中文标题】Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单【英文标题】:Laravel 5.2 : MethodNotAllowedHttpException in RouteCollection.php line 219 - updating the forms 【发布时间】:2016-07-30 20:53:11 【问题描述】:

我有一个表格,我正在尝试更新表格。在表单中,'name'是一个唯一字段(在请求页面和表格中添加了唯一条件,名称设置为唯一)。当我尝试更新表单时(我提供了值,表中已经存在),它显示“RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException”错误。

如果我使用表中不存在的名称更新“名称”,它将正常工作。

路由器

Route::group(['middleware' => ['superadmin']], function () 
    Route::post('/sadmin/update_club',array('uses' => 'SAdmin\ClubController@updateClub', 'as' => 'updateClub'));

请求

class UpdateClubRequest extends Request
    
   public function authorize()
   
      return true;
   
   public function rules()
   
     return [
        'name' => 'required|max:150|unique:clubs,name,'.Request::input('id'),
        'logo' => 'image|mimes:jpeg,png,bmp,gif,svg|max:10000',
      ];
   
 

布局页面

 Form::open(array('route' => 'updateClub', 'method' => 'POST', 'class' => 'form-horizontal', 'files'=>true)) 

   Form::hidden('id', $club[0]['id']) 
   Form::text('name', $club[0]['name'], array('class' => 'form-control', 'maxlength' => 50)) 

 Form::close()    

【问题讨论】:

我觉得MethodNotAllowedHttpException 通常与postingget 路由相关,反之亦然,这也是错误消息显示的内容。您是否有一个 get 路由定义到您的post 路由上方的同一位置? @camelCase 。是的,我有很多获取路线... Route::get('/sadmin/clubs', 'SAdmin\ClubController@Clubs'); Route::get('/sadmin/add_club', 'SAdmin\ClubController@addClub'); 但是'/sadmin/update_club' 有吗? 【参考方案1】:

我在这里没有看到任何错误,因此错误可能在其他地方。例如,我看到您在这条路线上使用superadmin。您应该在控制台中运行:

php artisan route:list

查看哪些中间件应用于updateClub 路由名称并验证此中间件代码,因为其中一些可能进行了不正确的重定向(例如,方法GET 到只有POST 的路由)。

第二件事(这里不会引起问题,但您应该遵循一些标准) - 如果您创建更新某些内容的操作,您应该使用 PUT 方法(POST 用于创建新对象),因此在路由和表单中对于这条路线,您应该将 POST 更改为 PUT

编辑

问题也可能有点不同。假设您有多步骤表单(可能是您的情况,因为您仅将 POST 用于在第 2 步中出现错误,请求类将尝试再次重定向到第 2 步,但使用 GET 方法,因此您应该在 routes.php 中也允许 GET 方法,所以在您的情况下,您可能应该更改

Route::post('someroute' ...

进入:

Route::match(['get','post'], 'someroute' ...

您应该为显示此表单的页面执行此操作

【讨论】:

实际上这个问题只有在我添加表中已经存在的名称时才存在。如果我将请求 - “'name'=>'required|unique:clubs,name,'.Request::input('id')”更改为“'name'=>'required'”,它将起作用 @LindoSebastian 但是您是否已将其更改为显示表单的路线?在显示此表单的 routes.php 中显示路线 @LindoSebastian 很高兴我能提供帮助

以上是关于Laravel 5.2:RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException - 更新表单的主要内容,如果未能解决你的问题,请参考以下文章

试图获取非对象的属性 [laravel 5.2]

Laravel 5.2 无法打开 laravel.log

在laravel 5.2中,Laravel手动登录始终不匹配

未找到 Laravel 5.2 自定义包路径

改变资源动词laravel 5.2

Laravel 5.2出错