无法在Laravel Profile控制器中使用Auth :: user()传递$ user变量

时间:2017-02-25 23:57:36

标签: php laravel

我刚开始学习Laravel一周前,我遇到了中间件和使用Auth :: user()的问题。对于Laravel> 5.3,您不能再在控制器中传递会话变量。我希望能够将$ user模型传递回刀片文件(在URL字符串中输入为{{$ user-> avatar}}),但我不知道该怎么做。

我花了一整天时间(基于来自https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors的建议)),并且我一直得到空值,错误(未定义变量:用户)。我真的不知道如何继续,如果有人能帮助我,我将不胜感激。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use App\Http\Requests;
use App\User;
use Auth;
use Image;

class ProfileController extends Controller
{
    public function profile($id)
    {
        $user = User::where('id', $id)->first();
        return view('user.profile',compact('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();
            dd($user);
        }
        return view('user.profile',compact('user'));
    }
}

3 个答案:

答案 0 :(得分:0)

您不需要从控制器传递经过身份验证的用户。

在您的Blade模板中,只需直接使用它,例如:

{{ Auth::user()->id }}

这假定用户已登录。

答案 1 :(得分:0)

dd(Auth::user())方法中的profile()返回您的预期数据时,请尝试以下操作:

public function profile(){
    $user = Auth::user();
    return view('profile', compact('user'));
}

然后,您应该可以在刀片文件中执行{{ $user->id }}。我知道上面的代码与你的代码相似,但值得一试!

答案 2 :(得分:0)

如果您创建自己的管理员身份验证防护。 当您profile()方法中的dd(Auth :: guard('admin')-> user())返回登录管理员用户的预期数据时,请尝试以下操作:

public function profile(){
     $user = Auth::guard('admin')->user();
     return view('profile', compact('user'));
}

然后,您应该可以在刀片文件中执行{{$ user-> id}}。我知道上面的代码与您拥有的代码相似,但是值得一试。

如果您使用自己的身份验证数据创建自己的身份验证防护,则请使用具有您的身份验证防护名称的user()方法。