[英]How do I pass user profile pic in nav through AppServiceProvider? laravel-5
這是非常常見的任務。 我正在嘗試在整個網站的導航上顯示用戶個人資料圖片。 個人資料圖片是來自google,facebook或s3(如果用戶上傳)的網址。 我具有此功能來訪問圖片
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('HomeController@index',$pic)?>'/></li>
我的家庭控制器:
HomeController類擴展Controller {
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));
});
}
}
每當您看到類似User::method($user)
東西時,最好重構它,使該方法位於用戶對象本身上,即$user->method()
Laravel具有更好的“附加”屬性。 這意味着它的行為與普通屬性(數據庫列)完全一樣,您只需為其定義訪問器方法即可:
1-發揮作用:
public static function get_profile_pic($user)
並將其更改為
public function getProfilePicAttribute()
2-在該方法內部用$this
替換$user
。
3-最后,將此數組添加到您的User模型:
protected $appends = ['profile_pic'];
這告訴Laravel說:“profile_pic”就像一個數據庫屬性,但不應該被保存到數據庫表中。
現在,對於任何User
對象,您只需使用$user->profile_pic
,例如
<img src="{{ $user->profile_pic }}">
並將您的視圖編輯器更改為view->with($user, Auth::user())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.