我收到错误"MethodNotAllowedHttpException 没有消息">,提交我的用户表单,旨在更新用户的表格。我在同一页面上有两个帖子表格和两个帖子路线,这和它有什么关系吗?
我将包括所有路由和可能与之冲突的另一种形式。
网络.php
Route::get('profile','userController@profile');
Route::post('profile', 'userController@update_avatar');
Route::post('profile-update', 'userController@update_account'); //this ones not working
用户控制器.php
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppUser;
use Auth;
use Image;
class UserController extends Controller
{
//
public function profile()
{
return view('profile', array('user' => Auth::user()) );
}
public function update_avatar(Request $request)
{
if($request->hasFile('avatar')){
$avatar = $request->file('avatar');
$filename = time() . '.' . $avatar->getClientOriginalExtension();
Image::make($avatar)->resize(300,300)->save( public_path('/uploads/avatars/' . $filename) );
$user = Auth::user();
$user->avatar = $filename;
$user->save();
}
return view('profile', array('user' => Auth::user()) );
}
public function update_account(Request $request, $id) //the function with the error
{
User::update([
'id' => Auth::user()->id,
'name' => $request->name,
'email' => $request->email
]);
return redirect('/profile');
}
}
profile.blade.php
<img src="/uploads/avatars/{{ $user->avatar }}" style="width:150px;height:150px;float:left;border-radius:50%;margin-right:25px">
<h2>{{ $user->name }}'s Profile</h2>
<form enctype="multipart/form-data" action="/profile" method="post">
<label>Update Profile Image</label>
<input type="file" name="avatar">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="submit" class=" btn btn-sm btn-light" style="color:#2b2b2b;" value="Update Image">
</form>
<form method="post" action="/profile-update"> <!-- The form with the error -->
{{ method_field('put') }}
{{ csrf_field() }}
<input type="hidden" name="_method" value="PUT" />
<label>Username</label>
<input type="text" name="name" class="form-control" value="{{ $user->name }}">
<label>Email</label>
<input type="email" name="email" class="form-control" value="{{ $user->email }}">
<input type="submit" id="update-account" class="btn btn-success" value="Update">
</form>
尝试此方法:
public function update_account(Request $request, $id)
{
$user = User::find($id)
$user->name = $request->name;
$user->email = $request->email;
$user->update();
return redirect('/profile');
}
您没有任何路由可以处理"配置文件更新"的 PUT 请求。在窗体中,您定义了以下函数。
{{ method_field('put') }}
此帮助程序函数生成一个隐藏的输入字段,Laravel将使用该字段仅作为PUT处理当前请求。
要完成这项工作,您必须通过删除上述帮助程序函数来发出请求 POST,或者将路由方法更改为 PUT。
Route::put('profile-update', 'userController@update_account');
对于那些可能需要相同答案的人,为了解决这个问题,我不得不玩了相当长一段时间,并使用建议答案中的一些来完全解决问题。
- 我更改了路由方法以放入网络.php。
- 用@TonzFale答案替换了我的update_account函数,但用
$user = User::find(Auth::user()->id);
替换了$user = User::find($id)
。