【问题标题】:How do I pass user profile pic in nav through AppServiceProvider? laravel-5如何通过 AppServiceProvider 在导航中传递用户个人资料图片? laravel-5
【发布时间】:2016-01-16 09:59:40
【问题描述】:

这是一个非常常见的任务。我正在尝试在整个网站的导航上显示用户个人资料图片。 个人资料图片是来自 google、facebook 或来自 s3(如果用户上传它们)的 url。我有这个功能可以访问图片

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 扩展控制器 {

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));
        });
    }
}

【问题讨论】:

  • 我在 laracast 中遵循了一个教程。 laracasts.com/series/laravel-5-fundamentals/episodes/25.
  • $view-&gt;with('pic', User::get_profile_pic($user)); 更改为 $view-&gt;with('pic',$pic); 我认为您的 AppServiceProvider 类的顶部有 use App\User;,如果没有添加它或将 $pic = User::.... 更改为 $pic = App\User::..
  • 您的静态函数也存在于您的用户模型中吗?你在用户模型上调用它,然后将用户传递给它?不应该只是$pic = get_profile_pic($user); 吗?我会将这种东西作为通过 composer 自动加载的辅助函数
  • 是的,它在我的用户模型中。我的开发人员不想要任何与模型相关的辅助函数,所以我没有别的办法。此外,我仍然收到未定义的变量图片消息。在我看来,我可能传递了错误的东西吗?

标签: php laravel laravel-5 blade service-provider


【解决方案1】:

任何时候你看到像User::method($user) 这样的东西可能最好重构它,以便方法在用户对象本身上,即$user-&gt;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-&gt;profile_pic,例如

<img src="{{ $user->profile_pic }}">

并将您的视图作曲家更改为 view-&gt;with($user, Auth::user())

【讨论】:

  • 这真是太酷了...谢谢。我能想到几个我可以在我的应用程序中使用它:)
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多