如何通过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));
});
}
}
你看到这样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())
这真的很酷...谢谢。我可以想到几个我可以在我的应用程序中使用此:) – joejoeso
我跟着laracast教程一些。 https://laracasts.com/series/laravel-5-fundamentals/episodes/25。 – joejoeso
改变'$视图 - >与( 'PIC',用户:: get_profile_pic($用户));''到$视图 - >与( 'PIC',$ PIC);',我认为你有'使用应用程序\用户;'你AppServiceProvider类的顶部,如果也不它添加或更改'$ PIC =用户:: ....''到$ PIC =软件\用户:: ..' – futureweb
也做你的静态功能住在你的用户模式?你是在用户模型上调用它,然后将用户传递给它?它不应该只是'$ pic = get_profile_pic($ user);'?我有这样的事情作为一个帮手功能自动加载通过作曲家 – futureweb