2015-10-17 48 views
1

這是一個很常見的任務。我試圖在整個網站的導航欄上顯示用戶個人資料照片。 輪廓圖片均來自網址,谷歌,Facebook,或者如果用戶上傳他們S3。我有這個功能來訪問圖片如何通過AppServiceProvider在導航中傳遞用戶個人資料圖片? laravel-5

public static function get_profile_pic($user){ 
    $pic=array_flatten($user->media->where('category','profile'))[0]->path; 
    if(empty($pic)){ 
     $pic = '/images/user-icon.jpg'; 
     return $pic; 
    }else 
     return $pic; 
} 

在我的導航視圖我有:

@if(Auth::check())     
<li><img class='nav-pic' src='<?php link_to_action('[email protected]',$pic)?>'/></li> 

我的HomeController:

類HomeController的擴展控制器{

public function index(Request $request) { 
    if ($request->user()) { 
     $user = $request->user(); 
     $pic = User::get_profile_pic($user); 
} 
    view()->share('scripts', array('home.js')); 
    return view('home.index', compact('user')); 
} 

這是我在AppServiceProvider

public function boot() 
{ 
    if (Auth::check()){ 
     $user = Auth::user(); 
     $pic = User::get_profile_pic($user); 
     view()->composer('includes.new_nav1',function($view){ 
      $view->with('pic', User::get_profile_pic($user)); 
     }); 
    } 
} 
+0

我跟着laracast教程一些。 https://laracasts.com/series/laravel-5-fundamentals/episodes/25。 – joejoeso

+0

改變'$視圖 - >與( 'PIC',用戶:: get_profile_pic($用戶));''到$視圖 - >與( 'PIC',$ PIC);',我認爲你有'使用應用程序\用戶;'你AppServiceProvider類的頂部,如果也不它添加或更改'$ PIC =用戶:: ....''到$ PIC =軟件\用戶:: ..' – futureweb

+0

也做你的靜態功能住在你的用戶模式?你是在用戶模型上調用它,然後將用戶傳遞給它?它不應該只是'$ pic = get_profile_pic($ user);'?我有這樣的事情作爲一個幫手功能自動加載通過作曲家 – futureweb

回答

2

你看到這樣User::method($user)它可能會更好重構,如此,該方法是用戶對象本身的任何時間,即$user->method()

Laravel有什麼更好的被稱爲「附加」屬性。這意味着它的行爲完全像一個正常的屬性(數據庫列),你只需要爲它定義的存取方法:


1 - 把你的功能:

public static function get_profile_pic($user) 

,並更改爲

public function getProfilePicAttribute() 

2 - 在該方法內替換$user$this

3 - 最後,該陣列添加到您的用戶模式:

protected $appends = ['profile_pic']; 

這告訴Laravel說:「profile_pic」就像一個數據庫屬性,但應該保存到數據庫表。

現在對於任何User對象,你可以簡單地使用$user->profile_pic,例如

<img src="{{ $user->profile_pic }}"> 

,並更改您的視圖作曲家只是view->with($user, Auth::user())

+0

這真的很酷...謝謝。我可以想到幾個我可以在我的應用程序中使用此:) – joejoeso

相關問題