代码之家  ›  专栏  ›  技术社区  ›  Just101

“无消息”错误laravel-正在尝试更新用户帐户信息

  •  0
  • Just101  · 技术社区  · 6 年前

    我收到了错误 “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 App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    use App\User;
    
    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');
    
        }
    }
    

    轮廓刀身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>
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Winston Fale    6 年前

    尝试此方法:

    public function update_account(Request $request, $id) 
    {
        $user = User::find($id)
        $user->name = $request->name;
        $user->email = $request->email;
        $user->update();
    
        return redirect('/profile');
    }
    
        2
  •  0
  •   Alley Shairu    6 年前

    您没有任何路由可以处理“配置文件更新”的PUT请求。在表单中定义了以下函数。

    {{ method_field('put') }}
    

    此助手函数生成一个隐藏的输入字段,Laravel将使用该字段仅在PUT时处理当前请求。

    要做到这一点,您必须通过删除上述助手功能来发布您的请求,或者将路由方法更改为PUT。

    Route::put('profile-update', 'userController@update_account');
    
        3
  •  0
  •   Just101    6 年前

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

    1. 我将路由方法更改为放入web。php。
    2. 用@TonzFale answer替换了my update\u account函数,但替换为 $user = User::find($id) 具有 $user = User::find(Auth::user()->id);