如何通过 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>
我的家庭控制器:
class 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 有一个更好的东西叫做 "appended" 属性。这意味着它的行为与普通属性(数据库列)完全一样,您只需为其定义一个访问器方法:
1 - 接受你的函数:
public static function get_profile_pic($user)
并将其更改为
public function getProfilePicAttribute()
2 - 在该方法中用 $this
替换 $user
。
3 - 最后,将此数组添加到您的用户模型中:
protected $appends = ['profile_pic'];
这告诉 Laravel "profile_pic" 的行为类似于数据库属性,但 不应该 保存到数据库 table.
现在对于任何 User
对象,您可以简单地使用 $user->profile_pic
,例如
<img src="{{ $user->profile_pic }}">
并将您的视图编辑器更改为 view->with($user, Auth::user())
这是一个很常见的任务。我试图在整个站点的导航栏上显示用户个人资料图片。 个人资料图片是来自 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>
我的家庭控制器:
class 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 有一个更好的东西叫做 "appended" 属性。这意味着它的行为与普通属性(数据库列)完全一样,您只需为其定义一个访问器方法:
1 - 接受你的函数:
public static function get_profile_pic($user)
并将其更改为
public function getProfilePicAttribute()
2 - 在该方法中用 $this
替换 $user
。
3 - 最后,将此数组添加到您的用户模型中:
protected $appends = ['profile_pic'];
这告诉 Laravel "profile_pic" 的行为类似于数据库属性,但 不应该 保存到数据库 table.
现在对于任何 User
对象,您可以简单地使用 $user->profile_pic
,例如
<img src="{{ $user->profile_pic }}">
并将您的视图编辑器更改为 view->with($user, Auth::user())