Проблема с доступом к глобальной переменной в приложении Laravel - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь создать глобальную переменную в AppServiceProvider. php, которая мне понадобится во всем значении моего приложения во всех блейд-файлах. Эта переменная - $ profile, которая получает данные профиля от пользователя и отображает их в блейдах. Я сделал это так, когда я нахожусь в моем профиле, он показывает аутентифицированного пользователя, который является мной, и это нормально (в URL-адрес похож на этот профиль / Authuser), что Authuser это имя пользователя из базы данных. Проблема в том, что когда я go перехожу на другой профиль, я получаю сообщение об ошибке с неопределенным именем пользователя (в профиле URL / Someuser). Мне нужна помощь, чтобы получить это имя пользователя в AppServiceProvider. php. Проблема в том, что $ username в сервис-провайдере. Я не знаю, как передать это там во всем мире. Любая помощь приветствуется. Вот мой код.

AppServiceProvider. php

public function boot()
{ 

    $profileId = $this->getIdFromUsername($username);  // Here is problem, I don't know how to get that username

    view()->composer('*', function ($view) {
        $view->with('profile', Auth::id() ? UserProfile::profileDetails($profileId, Auth::user()->id) : []);  
    });

    Builder::defaultStringLength(191); // Update defaultStringLength
}

public function getIdFromUsername($username)
{
    if ($user = User::where('username', $username)->first()) {
        return $user->id;  
    }

    return abort(404);  
}

web. php

Route::get('profile/{profile}', 'UserProfileController@showProfile')->name('profile.show');

1 Ответ

1 голос
/ 10 апреля 2020

Я думаю, вы слишком усложняете себя.

Если я понимаю ваше приложение. У пользователя есть правильный профиль?

Go для вашей пользователя модель и создать связь между пользователем и профилем

public function userProfile()
    {
        return $this->hasOne('App\UserProfile');
    }

При этом профиль будет следовать пользователь, и вам не нужно передавать его. Если вам нужен профиль для текущего пользователя.

Auth::user()->userProfile();

Если вам нужен профиль другого пользователя, то

$owner = User::where('username', $username)->first();
$owner->userProfile();

По сути, вы можете иметь доступ к профилю вашего вошедшего в систему пользователя. или любого другого пользователя, просто найдя нужного вам пользователя.

Теперь, если вы действительно wi sh хотите иметь модель в каждом представлении, вы помещаете ее в неправильное место. Видите ли, поставщики услуг предназначены для ie вещей, а не для получения данных. Вероятно, вы думаете о View Composer, который вы делаете ie с поставщиком услуг, но фактические данные поступают из самого Composer. Подробнее о View Composer вы можете узнать в Документах. https://laravel.com/docs/7.x/views#view -композиторов

Просмотр Композиторы - это только один из способов сделать это, быстрый поиск в Google поднял этот вопрос, который предлагает 3 дополнительных альтернативы представлению composer. Как передать данные во все представления в Laravel 5?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...