尝试更新用户帐户信息时出错"No message"



我收到错误"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');

对于那些可能需要相同答案的人,为了解决这个问题,我不得不玩了相当长一段时间,并使用建议答案中的一些来完全解决问题。

  1. 我更改了路由方法以放入网络.php。
  2. 用@TonzFale答案替换了我的update_account函数,但用$user = User::find(Auth::user()->id);替换了$user = User::find($id)

相关内容

最新更新