PUT请求Laravel上的MethodNotAllowedException

时间:2017-01-13 19:50:06

标签: php forms laravel http routes

我正在尝试使用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方法访问另一个路径,我没有注册,所以这就是错误显示的原因,但问题是,我不知道知道为什么表单提交给另一个网址。

1 个答案:

答案 0 :(得分:2)

如果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');

希望这会有所帮助。如果是的话,请在这里告诉我们。