【问题标题】:Laravel form won't PATCH, only POST - nested RESTfull Controllers, MethodNotAllowedHttpExceptionLaravel 表单不会 PATCH,只有 POST - 嵌套的 RESTfull 控制器,MethodNotAllowedHttpException
【发布时间】:2014-11-09 13:07:03
【问题描述】:

我正在尝试允许用户编辑他们的播放列表。但是,每当我尝试执行 PATCH 请求时,都会收到 MethodNotAllowedHttpException 错误。 (它正在等待一个 POST)

我已经设置了 RESTful 资源控制器:

Routes.php:

Route::resource('users', 'UsersController');
Route::resource('users.playlists', 'PlaylistsController');

这应该让我可以访问:(通过 php artisan routes 显示)

URI                                        | Name                   | Action
PATCH users/{users}/playlists/{playlists}  | users.playlists.update | PlaylistsController@update

但是,当我尝试执行以下表单时,我收到 MethodNotAllowedHttpException 错误:

/users/testuser/playlists/1/edit

{{ Form::open(['route' => ['users.playlists.update', $playlist->id], 'method' => 'PATCH' ]) }}
{{ Form::text('title', $playlist->title) }}
{{ Form::close() }}

如果我删除'method'=> 'PATCH',我不会收到错误,但它会执行我的public function store(),而不是我的public function update()

【问题讨论】:

    标签: laravel laravel-4 laravel-routing


    【解决方案1】:

    在表格后写{!! method_field('patch') !!}

    <form method="POST" action="patchlink">
         {!! method_field('patch') !!}
         . . .
    </form>
    

    Official documentation for helper function method_field()

    【讨论】:

      【解决方案2】:

      在 Laravel 5 及更高版本中:

      <form method="POST" action="patchlink">
          @method('patch')
          . . .
      </form>
      

      【讨论】:

        【解决方案3】:

        由于 html 表单仅支持 GETPOST 您需要添加一个额外的隐藏字段 到名为_method 的表单,以模拟PATCH 请求

        <input type="hidden" name="_method" value="PATCH">
        

        【讨论】:

        • PATCH 正在通过 Form::open 中的方法选项添加。您也可以使用 PUT。我遇到了同样莫名其妙的问题,无论我做什么,PUT 或 PATCH 方法都会抛出 MethodNotAllowedHttpException。非常令人沮丧。
        • 尝试使用Route::any('the_url_where_you_post_to', function(){}); 或根据您使用的方法Route::patchRoute::put
        【解决方案4】:

        正如@Michael A 在上述评论中所建议的那样,将其作为 POST 发送

        <form method="POST" action="patchlink">
             <input type="hidden" name="_method" value="PATCH">
        

        为我工作。

        【讨论】:

          猜你喜欢
          • 2015-06-02
          • 2014-11-06
          • 2012-11-30
          • 2013-01-18
          • 2018-11-25
          • 2019-12-12
          • 2016-06-23
          • 1970-01-01
          相关资源
          最近更新 更多