如何通过AppServiceProvider在导航中传递用户个人资料图片? laravel-5

问题描述:

这是一个很常见的任务。我试图在整个网站的导航栏上显示用户个人资料照片。 轮廓图片均来自网址,谷歌,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

你看到这样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