请我找不到问题出在哪里!
叶片
<form action="/profile/{{$user->id}}" enctype="multipart/form-data" method="post">
@csrf
@method('patch')
路线
Route::patch('/profile/{user}', 'ProfilesControler@update')->name('profile.update');
错误:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 此路由不支持 GET 方法。支持的方法: 补丁。
编辑1-网络.php
Route::get('/', function () { return view('welcome'); });
Auth::routes();
Route::get('/p/create','postsController@create');
Route::get('/p/{posts}','postsController@show');
Route::post('/p','postsController@store');
Route::get('/profile/{user}/edit', 'ProfilesControler@edit')->name('Profile.edit');
Route::get('/Profile/{user}', 'ProfilesControler@index')->name('Profile.show');
Route::post('/profile/{user}', 'ProfilesControler@update')->name('profile.update')
试试这个:
<form action="/profile/{{$user->id}}" enctype="multipart/form-data" method="post">
@method('PATCH')
@csrf
</form>
还有一个提示始终使用route method
表示路由,因为您在web.php
中命名了路由,因此易于维护和调试
<form action="{{route('profile.update',['user' => $user->id])}}" enctype="multipart/form-data" method="post">
@method('PATCH')
@csrf
</form>
在此处阅读有关方法欺骗的更多信息
希望对您有所帮助。
谢谢。
注意:如果问题仍然存在,请尝试清除路由缓存php artisan route:clear
更改<form action="/profile/{{$user->id}}" enctype="multipart/form-data" method="post">
至 :<form action="/profile/{{$user->id}}" enctype="multipart/form-data" method="GET">
再试一次
注意:您无法使用 GET 上传图像,
编辑:为您的路线命名,然后使用它
比如:Route::post('/update', 'ProfilesControler@update');
或者你可以将补丁切换到发布或获取
或 :Route::patch('/update', 'ProfilesControler@update')->name('update');
Route::patch('/update', 'ProfilesControler@update')->name('update');
在回答您的问题之前。让我们阅读一些事实,要执行resource
方法,您必须遵循一些最佳实践。
Uri必须遵循此模式/controllerName/methodName/{unique_identifier}
对于@index
,@store
Route::get('/profile/','ProfileController@index');
Route::post('/profile/','ProfileController@store');
以上两条路线相同,但方法不同。
对于@show
Route::get('/profile/{user_id}','ProfileController@show');
对于@create
,@edit
Route::get('/profile/create','ProfileController@create');
Route::get('/profile/edit/{user_id}','ProfileController@edit');
对于@update
,@destroy
Route::put('/profile/update/{user_id}','ProfileController@update');
Route::delete('/profile/destroy/{user_id}','ProfileController@destroy');
或者您可以使用
Route::post('/profile/update/{user_id}','ProfileController@update');
Route::post('/profile/destroy/{user_id}','ProfileController@destroy');
对于更新请求,您的method
应该是PUT
的;所以
<form method="POST">
@csrf
@method('PUT')
<!---whatever your code -->
</form>
或
{{ Form::open(array('url' => '/', 'method' => 'PUT')) }}
.... wathever code here
{{ Form::close() }}
注意:由于 HTML 表单仅支持POST和GET,因此PUT和DELETE方法将通过自动添加_method隐藏字段来欺骗 到您的表单。
在您的情况下,method
没有设置为路由接受PATCH
方法,因此请检查您的@method('PATCH')
指令是否在您的form
中回显关联input element
<input name="_method" type="hidden" value="PATCH">
您必须将ProfilesControler更改为ProfileController,因为它是 拼写错误
Gys,我确定因为我没有发送正确的数据,它无法正常工作,这是我的更新功能: 公共函数
更新(用户$user( {
$data=request()->validate([
'title'=>'required',
'description'=>'required',
'Url'=>'url',
]);
$user->profile->update($data);
return redirect("/profile/{$user->id}");
} }