我正在尝试使用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方法访问另一个路径,我没有注册,所以这就是错误显示的原因,但问题是,我不知道知道为什么表单提交给另一个网址。
答案 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');
希望这会有所帮助。如果是的话,请在这里告诉我们。