gpt4 book ai didi

php - Laravel 从所有 View 访问数据

转载 作者:可可西里 更新时间:2023-11-01 00:40:30 25 4
gpt4 key购买 nike

在我所有的 View 中,我已经能够默认访问 {{Auth::user()->name}},我正在尝试添加访问 { {Profile::user()->...}} 在我看来也是如此,但我遇到了一些麻烦。如果不需要的话,我真的不想使用 View Composer this post suggests因为看起来我需要手动列出每个 View 。相反,我选择使用 AppServiceProvider boot method在文档中列出。问题是我仍然无法调用 {{ Profile::user()->title }} 例如。我收到以下错误:

ErrorException in AppServiceProvider.php line 19:
Non-static method App\Profile::user() should not be called statically, assuming $this from incompatible context

这是我的 AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use View;
use App\Profile;

class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
View::share('user', Profile::user());
}

/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}

这是我的模型Profile.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
//
protected $fillable = [
'bio',
'linkedin_url',
'facebook_url',
'twitter_username',
'title',
'profile_image',
'user_id',
];
public function user()
{
return $this->belongsTo('user');
}
}

我做错了什么?我如何才能访问所有 View 中的用户配置文件数据?我可以看一个例子吗?

最佳答案

@Saumya 和@martindilling 都是正确的;您绑定(bind)到您正在使用的服务提供商中的 $user 变量。您只需将 user() 方法设为静态即可按您希望的方式访问它:

public static function user(){
if (auth()->user()) return auth()->user()->profile;
}

如果您使用它,那么如果您不需要 View 绑定(bind),则不需要它。您可以在任何 Blade 模板中使用 {{ Profile::user() }}。但这也有点愚蠢,因为现在您已经覆盖了您的关系方法名称。

如果您真的想要非常轻松地访问当前用户的个人资料,为什么不制作一个您可以从任何地方访问的辅助方法呢? currentUserProfile() 之类的?我不介意为每个项目保留一个包含一些快捷方法的文件,但是在向其中添加东西时你必须有良好的纪律,否则你的代码很快就会变得不可读。

我找到了第二个答案 here是添加您自己的自定义辅助方法的一种非常清晰的方法。

关于php - Laravel 从所有 View 访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41267134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com