Почему я могу использовать метод user () в laravel, даже не определяя его

У меня есть UserController а также User Модель у меня в Laravel 5 источник.
Также есть один AuthController также присутствует (поставляется в собранном виде с источником laravel).

Я хотел бы запрашивать данные из базы данных в моих блейдах, используя Eloquent Models.

Тем не менее, ни в моем User Модель (Eloquent), ни в каком контроллере, user() Метод определен. даже тогда я мог использовать его в своем лезвии, получая доступ к нему из Auth учебный класс. Зачем?

Например,

в моем клинке, {{ Auth::user()->fname }} работает. это получить данные fnameот моего users стол и повторить его.

Какова логика, стоящая за этим, и могу ли я эмулировать то же самое для других таблиц БД, таких как tasks?

1

Решение

Всякий раз, когда вы делаете это автоматически или вручную, что-то вроде этого

 if (Auth::attempt(['email' => $email, 'password' => $password]))
{
}

Данные выбранного пользователя будут сохранены в storage/framework/sessions

Это будет иметь данные что-то вроде

a:4:{s:6:"_token";s:40:"PEKGoLhoXMl1rUDNNq2besE1iSTtSKylFFIhuoZu";s:9:"_previous";a:1:{s:3:"url";s:43:"http://localhost/Learnings/laravel5/laravel";}s:9:"_sf2_meta";a:3:{s:1:"u";i:1432617607;s:1:"c";i:1432617607;s:1:"l";s:1:"0";}s:5:"flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}

В приведенном выше файле сессий нет никаких данных, и он будет содержать такие данные, как идентификатор пользователя, URL, токен в формате json.

Тогда всякий раз, когда вы звоните {{ Auth::user()->fname }} Laravel распознает, что вы пытаетесь получить зарегистрированного пользователя fname затем laravel извлечет файл, получит первичный ключ пользователя и отправит его из таблицы пользователя из вашей базы данных. и вы можете сделать это для всех столбцов пользователей table что у вас есть.

Вы можете узнать больше об этом Вот

1

Другие решения

Эта пользовательская функция определена в

vendor/laravel/framework/src/Illuminate/Auth/Guard.php

со следующим содержанием:

/**
* Get the currently authenticated user.
*
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function user()
{
if ($this->loggedOut) return;

// If we have already retrieved the user for the current request we can just
// return it back immediately. We do not want to pull the user data every
// request into the method because that would tremendously slow an app.
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))
{
$user = $this->provider->retrieveById($id);
}

// 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) && ! is_null($recaller))
{
$user = $this->getUserByRecaller($recaller);

if ($user)
{
$this->updateSession($user->getAuthIdentifier());

$this->fireLoginEvent($user, true);
}
}

return $this->user = $user;
}

в этом Guard.php определено больше функций, которые мы используем время от времени, даже не зная, откуда они берутся

1

Это работает, потому что Laravel поставляется с достойной аутентификацией.

Auth является библиотекой аутентификации и имеет множество таких функций, как документация!

0
По вопросам рекламы [email protected]