2017-01-27 4 views
1

Я хочу присвоить какое-то значение переменной $user_detail здесь, полученной из базы данных, которая будет использоваться по всему классу контроллера, например, детали пользователя. Его Laravel 5.3Как определить глобальную переменную для класса контроллера laravel в своем contructor

private $user_detail; 
public function __construct(){ 
    $this->user_detail=User::find(Auth::id()); 
} 
public function index(){ 
    return $post_data=$this->user_detail; 
} 

Из кода выше я получаю пустой экран. Как я могу достичь этого, или есть лучший способ этого? пожалуйста, предложите. Thanks

+0

'$ this-> user_detail = auth() -> user();' или не определять его вообще из ** construct ** и использовать 'auth() -> user()' везде, где вам нужно – zgabievi

ответ

2

Вы пытаетесь получить в настоящее время аутентифицированного пользователя и передать его где-нибудь. Но дело в том, Laravel уже сделал это для вас, и вы можете получить доступ с проверкой подлинности пользователя из любой части приложения с помощью auth()->user() объекта:

{{ auth()->user()->name }} 
{{ auth()->user()->email }} 
+0

Amazing! просто еще один запрос, предположим, что если у меня есть другая таблица, как я собираюсь получить это с помощью auth(), например, в настоящее время код выглядит как «User» с («hospital») -> find (Auth :: id ());» пользователь принадлежит к больнице –

+0

@GauravRai в этом случае использует [lazy eager loading] (https://laravel.com/docs/5.3/eloquent-relationships#lazy-eager-loading), например 'auth() -> user() -> load ('hospital') ' –

+0

Не могли бы вы помочь мне здесь http://stackoverflow.com/questions/41690759/laravel-flash-or-session-messages-not-expiring –

0

Вы возвращаетесь инициализацию, и именно поэтому вы видите пустую страницу. То, что вам нужно сделать, это инициализировать переменную и возвратить переменную впоследствии. Ваш код будет выглядеть так.

public function index() { 
    $post_data = $this->user_detail 
    return $post_data; 
} 

Это сначала активирует вашу переменную, а затем вы вернете переменную.

Но, как сказал @alexeymezenin, вы уже можете получить зарегистрированный пользовательский объект во всем своем приложении, используя auth()->user().

Смежные вопросы