"没有消息" error laravel - 尝试更新用户帐户信息

时间:2018-04-29 14:56:09

标签: laravel laravel-5 routes

我收到错误" MethodNotAllowedHttpException 提交我的用户表单时没有留言" ,这意味着要更新用户的表格。我在同一页面上有两个帖子表格和两个帖子路线,这会与它有关吗?

我将包含所有可能与之冲突的路线和另一种形式。

web.php

Route::get('profile','userController@profile');
Route::post('profile', 'userController@update_avatar');
Route::post('profile-update', 'userController@update_account'); //this ones not working

userController.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');

    }
}

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>

3 个答案:

答案 0 :(得分:1)

尝试这种方法:

public function update_account(Request $request, $id) 
{
    $user = User::find($id)
    $user->name = $request->name;
    $user->email = $request->email;
    $user->update();

    return redirect('/profile');
}

答案 1 :(得分:0)

您没有任何可以处理“profile-update”的PUT请求的路由。在您的表单中,您已定义以下功能。

{{ method_field('put') }}

此辅助函数生成一个隐藏的输入字段,Laravel将仅将其用作PUT处理当前请求。

要完成这项工作,您必须通过删除上述帮助程序功能或将路由方法更改为PUT来进行POST请求。

Route::put('profile-update', 'userController@update_account');

答案 2 :(得分:0)

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

  1. 我改变了路线方法以放入web.php。
  2. 将我的update_account函数替换为@TonzFale答案,但将$user = User::find($id)替换为$user = User::find(Auth::user()->id);