#laravel #laravel-5 #laravel-facade
#laravel #laravel-5 #laravel-фасад
Вопрос:
На странице редактирования профиля пользователя я хочу показать существующие значения данных текущего зарегистрированного пользователя, таких как имя, адрес электронной почты, пол и т.д. Мои вопросы заключаются в следующем
- Рекомендуется ли пользователю Auth::user()->name , Auth::user()->email напрямую для заполнения полей формы? Или я должен создать переменную, как
$user = Auth::user();
в моем контроллере, и передать ее в моем представлении в $user, как обычный объект? - Попадает ли использование Auth ::user() несколько раз в заданном файле представления в мою базу данных каждый раз, когда я ее использую?
Заранее спасибо.
Ответ №1:
Если вы посмотрите на SessionGuard.php
файл IlluminateAuth
, вы увидите метод user()
, который используется для получения текущего пользователя, прошедшего проверку подлинности:
/**
* Get the currently authenticated user.
*
* @return IlluminateContractsAuthAuthenticatable|null
*/
public function user()
{
if ($this->loggedOut) {
return;
}
// If we've already retrieved the user for the current request we can just
// return it back immediately. We do not want to fetch the user data on
// every call to this method because that would be tremendously slow.
if (! is_null($this->user)) {
return $this->user;
}
$id = $this->session->get($this->getName());
// First we will try to load the user using the identifier in the session if
// one exists. Otherwise we will check for a "remember me" cookie in this
// request, and if one exists, attempt to retrieve the user using that.
$user = null;
if (! is_null($id)) {
if ($user = $this->provider->retrieveById($id)) {
$this->fireAuthenticatedEvent($user);
}
}
// If the user is null, but we decrypt a "recaller" cookie we can attempt to
// pull the user data on that cookie which serves as a remember cookie on
// the application. Once we have a user we can return it to the caller.
$recaller = $this->getRecaller();
if (is_null($user) amp;amp; ! is_null($recaller)) {
$user = $this->getUserByRecaller($recaller);
if ($user) {
$this->updateSession($user->getAuthIdentifier());
$this->fireLoginEvent($user, true);
}
}
return $this->user = $user;
}
// Если мы уже извлекли пользователя для текущего запроса, мы можем просто немедленно вернуть его обратно. Мы не хотим извлекать пользовательские данные при каждом вызове этого метода, потому что это было бы чрезвычайно медленно.
if (! is_null($this->user)) {
return $this->user;
}
Таким образом, user()
многократный вызов не приведет к многократным вызовам базы данных.
Ответ №2:
Вы получите только 1 запрос к базе данных, поэтому многократное использование Auth::user() не является проблемой.
Я рекомендую вам использовать панель отладки Laravel как наиболее удобный способ оптимизации приложения.