【问题标题】:MethodNotAllowedException on PUT request LaravelPUT 请求 Laravel 上的 MethodNotAllowedException
【发布时间】:2017-05-29 06:52:35
【问题描述】:

我正在尝试使用 Laravel 在我的表单上执行 PUT 请求,它返回一个 MethodNotAllowedException,表单如下:

<form role="form" method="POST" action="{{ route('negocio.update', $negocio->id) }}" enctype="multipart/form-data">

{{ method_field('PUT') }}

</form>

而我的路线注册为:

Route::put('/update/{id}', ['as' => 'negocio.update', 'uses' => 'client\NegocioController@update']);

使用php artisan route:list 命令给了我以下路线:

| PUT | update/{id} | negocio.update | App\Http\Controllers\client\NegocioController@update | web

谁能解释一下,我做错了什么?我已经在不同的网站上搜索过,但没有解决方案。

*更新:

我打开浏览器检查器以查看正在执行的请求类型,它正在尝试使用 get 方法访问另一条路由,我没有注册该方法,所以这就是显示错误的原因,但事实是,我没有不知道为什么表单会提交到另一个 url。

【问题讨论】:

  • {{ route('negocio.update', $negocio->id) }} 的渲染内容是什么?是你提到的GET方法吗?
  • 渲染内容例如:(base_path)/update/2... 但是,我刚刚解决了这个问题,但我不知道为什么它不起作用,之前的请求导致“ PUT" 表单是一个 POST 请求,我将其更改为 GET 请求,现在它可以工作了...

标签: php forms laravel http routes


【解决方案1】:

如果negocio 是一个资源控制器,并且您在 web.php 文件中拥有它,如下所示:Route::resource('negocio','NegocioController');,请尝试这样做:

    <form method="POST" action="{{route('negocio.update', $negocio->id)}}" enctype="multipart/form-data">
    {{ method_field('PUT') }}{{csrf_field()}}
    </form>

但不要使用这个(删除或注释掉它):

Route::put('/update/{id}', ['as' => 'negocio.update', 'uses' => 'client\NegocioController@update']);

如果不是资源控制器,则在路由文件中声明如下:

Route::put('/update/{id}', 'NegocioController@update')->name('negocio.update');

如果这不能解决问题,请尝试使用 Post,然后让 {{method_field('Put') 解决问题。

Route::post('/update/{id}', 'NegocioController@update')->name('negocio.update');

希望这会有所帮助。如果是这样,请在此处告诉我们。

【讨论】:

    最近更新 更多