2016-11-01 59 views
1

我在Laravel 5.3上,我正在使用视图,我打算共享一个全局变量到我的所有视图,并且这个全局变量包含谁是当前登录用户的信息HomeController.php中的ErrorException错误27:尝试获取非对象的属性

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use View; 

//use models 
use App\profile; 

class HomeController extends Controller 
{ 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 

    public function __construct() 
    { 
     $this->middleware('auth'); 

     View::share('user_info',profile::where('username',Auth::user()->username)->get()); 

    } 
    public function index() 
    { 
     $current_page = 'home'; 
     return view('pages.home'); 
    } 
} 

但不幸的是它给了我这个错误在HomeController.php线27

ErrorException:试图让非对象的属性

和线27这条线

View::share('user_info',profile::where('username',Auth::user()->username)->first()); 

它似乎像这个问题是“验证::用户() - >用户名”,因为如果我手动指定的用户名,它给了我收集我所需要的。

任何想法,请帮助吗?

这是我用来修改认证资料的AuthenticatesUsers.php。

<?php 

namespace Illuminate\Foundation\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Lang; 


trait AuthenticatesUsers 
{ 
    use RedirectsUsers, ThrottlesLogins; 

    /** 
    * Show the application's login form. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function showLoginForm() 
    { 
     return view('auth.login'); 
    } 

    /** 
    * Handle a login request to the application. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function login(Request $request) 
    { 
     $this->validateLogin($request); 

     // If the class is using the ThrottlesLogins trait, we can automatically throttle 
     // the login attempts for this application. We'll key this by the username and 
     // the IP address of the client making these requests into this application. 
     if ($this->hasTooManyLoginAttempts($request)) { 
      $this->fireLockoutEvent($request); 

      return $this->sendLockoutResponse($request); 
     } 

     $credentials = $this->credentials($request); 

     if ($this->guard()->attempt($credentials, $request->has('remember'))) { 
      return $this->sendLoginResponse($request); 
     } 

     // If the login attempt was unsuccessful we will increment the number of attempts 
     // to login and redirect the user back to the login form. Of course, when this 
     // user surpasses their maximum number of attempts they will get locked out. 
     $this->incrementLoginAttempts($request); 

     return $this->sendFailedLoginResponse($request); 
    } 

    /** 
    * Validate the user login request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return void 
    */ 
    protected function validateLogin(Request $request) 
    { 
     $this->validate($request, [ 
      $this->username() => 'required', 'password' => 'required', 
     ]); 
    } 

    /** 
    * Get the needed authorization credentials from the request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return array 
    */ 
    protected function credentials(Request $request) 
    { 
     return $request->only($this->username(), 'password'); 
    } 

    /** 
    * Send the response after the user was authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    protected function sendLoginResponse(Request $request) 
    { 
     $request->session()->regenerate(); 

     $this->clearLoginAttempts($request); 

     return $this->authenticated($request, $this->guard()->user()) 
       ?: redirect()->intended($this->redirectPath()); 
    } 

    /** 
    * The user has been authenticated. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param mixed $user 
    * @return mixed 
    */ 
    protected function authenticated(Request $request, $user) 
    { 
     //check user role 
     return redirect('/app/system/dashboard'); 
    } 

    /** 
    * Get the failed login response instance. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    protected function sendFailedLoginResponse(Request $request) 
    { 
     return redirect()->back() 
      ->withInput($request->only($this->username(), 'remember')) 
      ->withErrors([ 
       $this->username() => Lang::get('auth.failed'), 
      ]); 
    } 

    /** 
    * Get the login username to be used by the controller. 
    * 
    * @return string 
    */ 
    public function username() 
    { 
     return 'username'; 
    } 

    /** 
    * Log the user out of the application. 
    * 
    * @param Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function logout(Request $request) 
    { 
     $this->guard()->logout(); 

     $request->session()->flush(); 

     $request->session()->regenerate(); 

     return redirect('/'); 
    } 

    /** 
    * Get the guard to be used during authentication. 
    * 
    * @return \Illuminate\Contracts\Auth\StatefulGuard 
    */ 
    protected function guard() 
    { 
     return Auth::guard(); 
    } 
} 
+0

如果Auth :: user没有被定义(登录)以防止那种错误'if(!Auth :: check()){ redirect('/ login')可能只是重定向回登录页面; }' – Beginner

+0

@NewbeeDev:为什么我必须这样做? –

+0

你得到的Auth :: user(),但你没有登录Auth :: user返回空。 Auth ::用户将只填写,如果你登录 – Beginner

回答

1

看来你运行该代码时,不登录的用户,那么你可以做一个检查:

View::share('user_info', auth()->check() ? profile::where('username', auth()->user()->username)->first() : null); 

如果用户没有登录该代码将返回轮廓或null

+0

我确定我已经登录。我试过了你的答案,但它不会产生任何错误,但我试图从视图刀片中调用它,如“{{$ user_info-> username}}”,它会引发我这个问题错误“试图获得非对象的属性”任何想法? –

+0

@CodeDemon,你应该检查'dd(auth() - > check())'返回。如果它返回'false',那么你有一些认证相关的问题(你认为用户登录了,但不是)。 –

+0

我尝试'dd(auth() - > check())'给构造函数,它返回false,我试图把它放在'public index()'中,它返回'true'任何想法?这是令人困惑的。为什么当我在构造函数中'dd'时,它返回false,但如果'dd'到'public index()',它会返回true? –

0

改变这种

if ($this->guard()->attempt($credentials, $request->has('remember'))) { 
    return $this->sendLoginResponse($request); 
} 

if (Auth::attempt($credentials, $request->has('remember'))) { 
    return $this->sendLoginResponse($request); 
} 
+0

会,可悲的是同样的错误。 :( –

+0

@CodeDemon错误是什么? – Beginner

相关问题