【问题标题】:Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException - Laravel 5.7Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException - Laravel 5.7
【发布时间】:2019-07-01 18:01:34
【问题描述】:

我有路线

Route::post('skill/store','SkillController@store');

我有一个叫它的表单

{!! Form::open(array('class' => 'form-horizontal', 'role' =>'form', 'url'=>'skill/store','files' => true, 'method' => 'POST' )) !!}

提交时,我不断收到

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException

如何进一步调试?

+--------+----------+--------------------------------------------------------+-----------------------------+------------------------------------------------------------------------+----------------+
| Domain | Method   | URI                                                    | Name                        | Action                                                                 | Middleware     |
+--------+----------+--------------------------------------------------------+-----------------------------+------------------------------------------------------------------------+----------------+
|        | POST     | /                                                      |                             | App\Http\Controllers\AccountController@postSignIn                      | web            |
|        | GET|HEAD | /                                                      |                             | App\Http\Controllers\FEController@index                                | web            |
|        | GET|HEAD | api/distributors                                       |                             | App\Http\Controllers\APIController@getDistributors                     | web            |
|        | GET|HEAD | api/reset-password                                     |                             | App\Http\Controllers\APIController@resetPassword                       | web            |
|        | GET|HEAD | code/{file}/_                                          |                             | App\Http\Controllers\ToolController@showFile                           | web            |
|        | GET|HEAD | coding-puzzle                                          |                             | App\Http\Controllers\CodeController@codingPuzzle                       | web            |
|        | POST     | coding-puzzle/process                                  |                             | App\Http\Controllers\CodeController@codingPuzzleProcess                | web            |
|        | GET|HEAD | contact                                                |                             | App\Http\Controllers\ContactController@index                           | web,auth       |
|        | POST     | contact-form                                           |                             | App\Http\Controllers\AccountController@contact                         | web            |
|        | GET|HEAD | contact/{id}                                           |                             | App\Http\Controllers\ContactController@show                            | web,auth       |
|        | DELETE   | contact/{id}/destroy                                   | contact.destroy             | App\Http\Controllers\ContactController@destroy                         | web,auth       |
|        | GET|HEAD | dashboard                                              |                             | App\Http\Controllers\FEController@dashboard                            | web,auth       |
|        | POST     | forgot-password                                        | forgot-password-post        | App\Http\Controllers\AccountController@postForgotPassword              | web            |
|        | GET|HEAD | getCaptivePortalURLs/{hostname}/{cpe_mac}/{device_mac} |                             | App\Http\Controllers\ToolController@getCaptivePortalURLs               | web            |
|        | GET|HEAD | getCertbyHostName/{hostname}                           |                             | App\Http\Controllers\ToolController@getCertbyHostName                  | web            |
|        | GET|HEAD | getCommitIDBaseOnBuildNumber/{buildNumber}             |                             | App\Http\Controllers\ToolController@getCommitIDBaseOnBuildNumber       | web            |
|        | GET|HEAD | getImagesFromSite/{hostname}                           |                             | App\Http\Controllers\ToolController@getImagesFromSite                  | web            |
|        | GET|HEAD | getUpdateServiceTypeCommand                            |                             | App\Http\Controllers\ToolController@getUpdateServiceTypeCommand        | web            |
|        | GET|HEAD | getskilldata                                           | getskilldata                | App\Http\Controllers\SkillController@skilldata                         | web            |
|        | GET|HEAD | guest                                                  |                             | App\Http\Controllers\GuestController@index                             | web,auth       |
|        | GET|HEAD | guest/create                                           | guest.create                | App\Http\Controllers\GuestController@create                            | web,auth       |
|        | POST     | guest/store                                            |                             | App\Http\Controllers\GuestController@store                             | web,auth       |
|        | GET|HEAD | guest/{id}                                             |                             | App\Http\Controllers\GuestController@show                              | web,auth       |
|        | DELETE   | guest/{id}/destroy                                     | guest.destroy               | App\Http\Controllers\GuestController@destroy                           | web,auth       |
|        | GET|HEAD | guest/{id}/edit                                        |                             | App\Http\Controllers\GuestController@edit                              | web,auth       |
|        | PUT      | guest/{id}/update                                      | guest.update                | App\Http\Controllers\GuestController@update                            | web,auth       |
|        | GET|HEAD | image                                                  |                             | App\Http\Controllers\ImageController@index                             | web,auth,admin |
|        | GET|HEAD | image/create                                           |                             | App\Http\Controllers\ImageController@create                            | web,auth,admin |
|        | POST     | image/store                                            |                             | App\Http\Controllers\ImageController@store                             | web,auth,admin |
|        | PUT      | image/type/{id}/update                                 |                             | App\Http\Controllers\ImageController@updateType                        | web,auth,admin |
|        | GET|HEAD | image/types                                            |                             | App\Http\Controllers\ImageController@types                             | web,auth,admin |
|        | GET|HEAD | image/{id}                                             |                             | App\Http\Controllers\ImageController@get                               | web,auth,admin |
|        | DELETE   | image/{id}/destroy                                     |                             | App\Http\Controllers\ImageController@destroy                           | web,auth,admin |
|        | GET|HEAD | image/{id}/edit                                        |                             | App\Http\Controllers\ImageController@edit                              | web,auth,admin |
|        | PUT      | image/{id}/update                                      |                             | App\Http\Controllers\ImageController@update                            | web,auth,admin |
|        | GET|HEAD | images                                                 |                             | App\Http\Controllers\ImageController@all                               | web,auth,admin |
|        | GET|HEAD | info                                                   |                             | App\Http\Controllers\FEController@info                                 | web            |
|        | POST     | login                                                  |                             | App\Http\Controllers\Auth\LoginController@login                        | web,guest      |
|        | GET|HEAD | login                                                  | login                       | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest      |
|        | POST     | logout                                                 | logout                      | App\Http\Controllers\Auth\LoginController@logout                       | web            |
|        | GET|HEAD | logout                                                 |                             | App\Http\Controllers\FEController@getSignout                           | web,auth       |
|        | GET|HEAD | logs                                                   |                             | App\Http\Controllers\GeneralController@logs                            | web,auth,admin |
|        | GET|HEAD | nuc/{tableName}                                        |                             | App\Http\Controllers\DatabaseController@show                           | web            |
|        | POST     | password/email                                         | password.email              | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest      |
|        | POST     | password/reset                                         | password.update             | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest      |
|        | GET|HEAD | password/reset                                         | password.request            | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest      |
|        | GET|HEAD | password/reset/{token}                                 | password.reset              | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest      |
|        | GET|HEAD | phpinfo                                                |                             | App\Http\Controllers\GeneralController@phpinfo                         | web,auth       |
|        | GET|HEAD | portfolio                                              |                             | App\Http\Controllers\PortfolioController@index                         | web,auth,admin |
|        | GET|HEAD | portfolio/all                                          |                             | App\Http\Controllers\FEController@portfolioall                         | web            |
|        | GET|HEAD | portfolio/create                                       |                             | App\Http\Controllers\PortfolioController@create                        | web,auth,admin |
|        | POST     | portfolio/image/{id}/destroy                           |                             | App\Http\Controllers\PortfolioController@destroyImage                  | web,auth,admin |
|        | POST     | portfolio/store                                        |                             | App\Http\Controllers\PortfolioController@store                         | web,auth,admin |
|        | DELETE   | portfolio/{id}/destroy                                 |                             | App\Http\Controllers\PortfolioController@destroy                       | web,auth,admin |
|        | GET|HEAD | portfolio/{id}/edit                                    |                             | App\Http\Controllers\PortfolioController@edit                          | web,auth,admin |
|        | GET|HEAD | portfolio/{id}/get                                     |                             | App\Http\Controllers\PortfolioController@get                           | web,auth,admin |
|        | POST     | portfolio/{id}/update                                  |                             | App\Http\Controllers\PortfolioController@update                        | web,auth,admin |
|        | GET|HEAD | projects/oop/{id}                                      |                             | App\Http\Controllers\ProjectController@oop                             | web,auth,admin |
|        | GET|HEAD | register                                               | register                    | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest      |
|        | POST     | register                                               |                             | App\Http\Controllers\AccountController@postRegister                    | web            |
|        | POST     | reset-password                                         | reset-password-post         | App\Http\Controllers\AccountController@postReSetPassword               | web            |
|        | GET|HEAD | reset-password/{code}                                  | reset-password              | App\Http\Controllers\AccountController@getReSetPassword                | web            |
|        | GET|HEAD | resume                                                 |                             | App\Http\Controllers\GeneralController@resume                          | web            |
|        | GET|HEAD | resume/doc                                             |                             | App\Http\Controllers\GeneralController@resumeDoc                       | web            |
|        | GET|HEAD | run/{file}                                             |                             | App\Http\Controllers\GeneralController@code                            | web            |
|        | GET|HEAD | run/{file}/_                                           |                             | App\Http\Controllers\ToolController@showFile                           | web            |
|        | GET|HEAD | seed/{tableName}                                       |                             | App\Http\Controllers\DatabaseController@seed                           | web            |
|        | POST     | set-password                                           | set-password-post           | App\Http\Controllers\AccountController@postSetPassword                 | web            |
|        | GET|HEAD | set-password/{code}                                    | set-password                | App\Http\Controllers\AccountController@getSetPassword                  | web            |
|        | GET|HEAD | showFiles                                              |                             | App\Http\Controllers\ToolController@showFiles                          | web            |
|        | GET|HEAD | showFiles/{fileName}                                   |                             | App\Http\Controllers\ToolController@showFile                           | web            |
|        | GET|HEAD | skill                                                  |                             | App\Http\Controllers\SkillController@index                             | web,auth,admin |
|        | GET|HEAD | skill/create                                           |                             | App\Http\Controllers\SkillController@create                            | web,auth,admin |
|        | POST     | skill/store                                            | skill.store                 | App\Http\Controllers\SkillController@store                             | web,auth,admin |
|        | DELETE   | skill/{id}/destroy                                     |                             | App\Http\Controllers\SkillController@destroy                           | web,auth,admin |
|        | GET|HEAD | skill/{id}/edit                                        |                             | App\Http\Controllers\SkillController@edit                              | web,auth,admin |
|        | POST     | skill/{id}/update                                      |                             | App\Http\Controllers\SkillController@update                            | web,auth,admin |
|        | GET|HEAD | skills                                                 |                             | App\Http\Controllers\SkillController@all                               | web            |
|        | GET|HEAD | user                                                   |                             | App\Http\Controllers\UserController@index                              | web,auth,admin |
|        | GET|HEAD | user-profile/{id}                                      |                             | App\Http\Controllers\UserController@profile                            | web,auth       |
|        | GET|HEAD | user/create                                            | user.create                 | App\Http\Controllers\UserController@create                             | web,auth,admin |
|        | POST     | user/store                                             | user.store                  | App\Http\Controllers\UserController@store                              | web,auth,admin |
|        | GET|HEAD | user/{id}                                              |                             | App\Http\Controllers\UserController@show                               | web,auth,admin |
|        | DELETE   | user/{id}/destroy                                      | user.destroy                | App\Http\Controllers\UserController@destroy                            | web,auth       |
|        | GET|HEAD | user/{id}/edit                                         |                             | App\Http\Controllers\UserController@edit                               | web,auth       |
|        | PUT      | user/{id}/update                                       | user.update                 | App\Http\Controllers\UserController@update                             | web,auth       |
|        | PUT      | user/{id}/update_basic_info                            | user.update_basic_info      | App\Http\Controllers\UserController@update_basic_info                  | web,auth       |
|        | PUT      | user/{id}/update_contact_info                          | user.update_contact_info    | App\Http\Controllers\UserController@update_contact_info                | web,auth       |
|        | PUT      | user/{id}/update_cover_picture                         | user.update_cover_picture   | App\Http\Controllers\UserController@update_cover_picture               | web,auth       |
|        | PUT      | user/{id}/update_profile_picture                       | user.update_profile_picture | App\Http\Controllers\UserController@update_profile_picture             | web,auth       |
|        | PUT      | user/{id}/update_summary_info                          | user.update_summary_info    | App\Http\Controllers\UserController@update_summary_info                | web,auth       |
|        | GET|HEAD | visitor                                                |                             | App\Http\Controllers\VisitorController@index                           | web,auth,admin |
|        | DELETE   | visitor/truncate                                       | visitor.truncate            | App\Http\Controllers\VisitorController@truncate                        | web,auth,admin |
|        | GET|HEAD | visitor/{id}                                           |                             | App\Http\Controllers\VisitorController@show                            | web,auth,admin |
|        | GET|HEAD | wedding                                                |                             | App\Http\Controllers\WeddingController@index                           | web            |
|        | GET|HEAD | wedding/guest/api                                      |                             | App\Http\Controllers\WeddingController@api                             | web            |
|        | GET|HEAD | wedding/guest/{id}/note/display                        |                             | App\Http\Controllers\WeddingController@display                         | web            |
|        | GET|HEAD | wedding/guest/{id}/note/not_display                    |                             | App\Http\Controllers\WeddingController@notDisplay                      | web            |
|        | GET|HEAD | wedding/invite                                         |                             | App\Http\Controllers\WeddingController@invite                          | web            |
|        | GET|HEAD | wedding/mexico                                         |                             | App\Http\Controllers\WeddingController@mexico                          | web            |
|        | POST     | wedding/note                                           |                             | App\Http\Controllers\WeddingController@note                            | web            |
|        | POST     | wedding/rsvp                                           |                             | App\Http\Controllers\WeddingController@rsvp                            | web            |
|        | GET|HEAD | works                                                  |                             | App\Http\Controllers\ImageController@works                             | web            |
+--------+----------+--------------------------------------------------------+-----------------------------+------------------------------------------------------------------------+----------------+

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.7 forms http-post


    【解决方案1】:

    我有同样的错误。 为了向前调试,我决定检查 match 方法中的 $Request 变量(在我的例子中,文件中的第 157 行 ...\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php)

    public function match(Request $request)
    {
        $routes = $this->get($request->getMethod());
        dd($request);
    

    就我而言,我发现该方法不是 POST 而是 PATCH ...

    警告:顺便说一句,如果您决定修改框架文件中的任何代码,请务必小心,在此类测试之前提交或备份不是一个坏主意。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      在表单的操作中使用像skill/store 这样的硬编码网址总是一个坏主意,尤其是在这种情况下,您可以很好地点击相对网址。

      为您的路线命名:

      Route::post('skill/store','SkillController@store')->name('skill.store');
      

      ... 并将表单的操作更改为

      {!! Form::open(array('class' => 'form-horizontal', 'role' =>'form', 'route'=> 'skill.store' ,'files' => true, 'method' => 'POST' )) !!}
      

      编辑:或者,您也可以指定 action 属性,如下所示:

      {!! Form::open(array('class' => 'form-horizontal', 'role' =>'form', 'action'=> 'SkillController@store', 'files' => true )) !!}
      

      编辑 2:从您的屏幕截图看来,没有为 skill/store 定义 GET 路由。在您的特定情况下,您需要定义通常会显示成功消息的路线,或者您可以这样做。

      public function store(Request $request)
      {
          // save the record
      
          return back()->with('success', 'The record has been saved successfully'); 
      }
      

      这将使您返回到先前存在的路线,您还可以在视图中添加成功消息。

      【讨论】:

      • 为什么需要这个'method' => 'POST' ?它应该是打开表单的默认设置。
      • 我明白了,我听从了其中一个人的建议。无论如何,我得到了与名称相同的结果。 " Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
      • 有趣。您能否将php artisan route:list 的结果添加到您的问题中?
      • 看来,你也可以只做route => 'name'。可以试试更新的代码吗?
      • 您也可以指定action 属性。我还删除了method。可以试试更新的代码吗?
      【解决方案3】:

      当您调用类 Route::method 时,它只接受通过该方法调用它。因此,在您的情况下,该帖子不起作用。首先我会发布表单和 var_dump 它的请求方法。

      【讨论】:

      • 我更新了我的帖子,除了 var_dump 之外,您还有其他建议吗?
      • 我想你误解了我的意思。您必须将表单发布到另一个 PHP 和 var_dump 它的请求,以查看方法是否作为帖子接收。也许 laravel 正在做一些消毒或其他事情。对于 html5 帖子是小写的。要测试,试试这个: Route::match(['get', 'post'], '/user', [ 'uses' => 'AppController@user', 'as' => 'useraccess', 'roles'= > 'HomeController@useroles', ]);
      • 知道了,让我做一个dd() 看看我是否在正确的store() 函数内。
      猜你喜欢
      • 2020-06-22
      • 2018-09-06
      • 2019-01-06
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2014-11-20
      • 2019-04-11
      • 2018-06-21
      相关资源
      最近更新 更多