簡體   English   中英

如何通過AppServiceProvider在導航中傳遞用戶個人資料圖片? laravel-5

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM