【问题标题】:MethodNotAllowedHttpException in RouteCollection.php line 219RouteCollection.php 第 219 行中的 MethodNotAllowedHttpException
【发布时间】:2015-09-25 15:29:50
【问题描述】:

当我存储帖子时出现此错误

MethodNotAllowedHttpException in RouteCollection.php line 219:

什么会导致这个问题??

Routes.php:

Route::get('home', 'PostsController@index');
Route::get('/', 'PostsController@index');
Route::get('index', 'PostsController@index');

Route::get('posts', 'PostsController@index');
Route::get('post/{slug}/{id}', 'PostsController@show');
Route::get('posts/sukurti-nauja-straipsni', 'PostsController@create');
Route::patch('posts/store-new-post', 'PostsController@store');
Route::get('post/{slug}/{id}/edit', 'PostsController@edit');
Route::patch('posts/{slug}', 'PostsController@update');


Route::get('tags/{tags}', 'TagsController@show');
Route::get('categories/{categories}', 'CategoriesController@show');

// Authentication routes...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

我正在使用 Laravel 5.1,但我一天都想不通..

【问题讨论】:

  • 当您通过邮局发送某些内容并尝试通过 get 或其他方式获取它时会发生这种情况。

标签: php laravel laravel-5.1


【解决方案1】:

由于您将帖子更新的方法设置为patch,请确保您open your form 使用该方法:

{!! Form::open(['method' => 'patch']) !!}

如果您没有使用 Form 类,您也可以确保表单下方有一个 hidden element called _method

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

同样,如果您通过 AJAX 发送此数据,只需在设置为 'PATCH' 的有效负载中添加一个 _method 键,然后再通过 POST 发送请求。部分浏览器(IE 7/8)不支持通过 XMLHttpRequest 进行 PATCH HTTP

您的另一个选择是更改您的路线以接受 POST 数据:

Route::post('posts/store-new-post', 'PostsController@store');
Route::post('posts/{slug}', 'PostsController@update');

【讨论】:

  • 我的服务器也面临同样的问题。但是在我的本地服务器上它工作正常。使用 L5.1 我没有通过 ajax 使用 post 方法使用补丁。任何帮助
  • 这个答案让我意识到,有时我只是一个愚蠢的人。哈哈哈!我正在使用 POST,但在我的路线中,我只是忘记使用 Route::post() 而不是 Route::get()。
【解决方案2】:

检查您的表单标签

<form action="/path/" method="post">

这里的“/path/”应该是“/path”,最后不要使用“/”。 p>

【讨论】:

    【解决方案3】:

    尝试添加到您的模型: protected $guarded = ['_token'];

    【讨论】:

      【解决方案4】:

      在我的情况下,最后有一个额外的“/”,例如:POST /api/clients/ 我已经删除它并且已经工作了:POST /api/clients

      【讨论】:

        【解决方案5】:

        我也遇到了这个问题,但在我的情况下,这是由于将多个路由设置为同一个控制器操作:

        Route::get('/',     'PostsController@index');
        Route::get('posts', 'PostsController@index');
        

        这适用于 GET 请求,但我将表单设置为提交给它自己 - 即。我没有在我的表单上指定一个动作——这意味着如果我在 /posts 它可以工作(因为我为该路由设置了一个适当的 POST 端点),但是从主页/ 它总是给我您描述的 MethodNotAllowedHttpException(因为没有为此设置 POST 数据路由)。花了很长时间才弄明白为什么该表单有时有效而有时无效。

        最后我通过将/ 的路由更改为重定向来修复它,如下所示:

        Route::get('/', function(){
            return redirect('posts');
        });
        

        ...虽然我猜想在表单上明确设置一个操作(或者也为/ 设置一个 POST 路由)也会完成这项工作。

        我是 Laravel 的新手,所以很可能还有其他方法比上述任何一种方法都好!

        【讨论】:

          【解决方案6】:

          导航到 vendor/laravel/framework/src/Illuminate/Foundation/Middleware/VerifyCsrfToken.php 并在函数 isReading() 方法中添加您想要的路由方法(POST,GET)。

          希望这可以帮助某人。

          【讨论】:

          • 这是 laravel 的一部分,你不想摆弄它。 Laravel 5.3 将此文件移动到另一个位置(vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php)。
          猜你喜欢
          • 2016-08-30
          • 2016-06-15
          • 2016-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多