2015-11-05 35 views
2

我的工作是與包含約像用戶名,電子郵件,圖像URL等用戶細節的頂欄的控制面板的項目這頂欄運行在幾乎所有的控制面板視圖。現在,在每一個ControlPanel控制控制器我做這樣的事情的最佳方式 - Laravel 5

/***** PostController *********/ 
class PostController extends Controller 
{ 
    protected $user; 

    public function __construct() 
    { 
     $user = Auth::user(); // Note: here $user is not a global variable 

     $this->user['user_name'] = $user->name; 
     $this->user['user_email'] = $user->email; 
     $this->user['user_role'] = $user->getRolesName()->first(); 
     $this->user['user_image'] = $user->image; 
    } 

然後在指數控制器我會通過當前用戶與角色,以及職位的細節是這樣的。

public function index() 
    { 
     $user = $this->user; 
     $posts = json_decode(Post::with('author')->get()->toJson()); 
     return view('globaladmin.posts.viewposts',compact('posts'), $user); 
    } 

我覺得可能是這樣做的更好的方法(可能是設計模式像庫),像往常任何幫助,將不勝感激。

回答

2

可以使用一種叫做視圖份額。如果您查看文檔(http://laravel.com/docs/master/views#sharing-data-with-all-views),您將能夠創建一個服務提供商,您可以將代碼放入其中。

快速(可能很髒)的修復程序是使用app \ Http \ Controllers \ Controller.php像這樣:

public function __construct() 
{ 
    $user = Auth::user(); // Note: here $user is not a global variable 
    $global_user = []; 

    if ($user !== null) { 
     $global_user['user_name'] = $user->name; 
     $global_user['user_email'] = $user->email; 
     $global_user['user_role'] = $user->getRolesName()->first(); 
     $global_user['user_image'] = $user->image; 
    } 

    view()->share('global_user', $global_user); 
} 

編輯:在葉片用這個,像這樣將工作:

@if($global_user) 
    {!! $global_user->user_name !!} 
@endif 
+1

我喜歡這種方式,我也是d編寫一些讀取將其添加到AppServiceProvider的引導方法但問題是這些控制器和服務提供者在Auth方法之前被實例化。所以把代碼放在controller.php中什麼也不做。我想將這些代碼將是驗證控制器自身內部的最佳場所 –

+0

驗證::用戶()應該如果你登錄內Controller.php這樣返回數據,你得到任何錯誤,當您試圖將代碼放在那裏,還是它只是一個空值? –

+1

是它只是一個空,它不處理if語句。我認爲問題是,這個代碼需要等待Controller.php這樣先處理身份驗證控制,因爲如果我們只是把一個構造在Controller.php這樣它將運行此代碼之前甚至實例的身份驗證控制器。不管怎麼說共享方法幫了不少忙,我結束了創建一個的ServiceProvider,然後用所有的意見分享吧:) –

1

既然你有簡單的數據分享,我建議你用Service Injection只需添加次是代碼段你掌握刀片模板:

@inject('user', 'App\User') 

然後用$user在每一個模板,它延長了主之一:BTW

<div> 
    Username: {{ $user->user_name }}. 
    ...etc 
</div> 

你不必因爲裏面auth()分享這全局功能,您可以訪問您當前登錄的用戶,如下所示:

auth()->user()->name // or ->email maybe!