2017-01-11 7 views
1

Я передаю значение в общем виде, беря значение из таблицы. Мне нужно знать идентификатор пользователя для этой цели, но Auth::check() возвращает false. Как мне это сделать? Ниже код:Laravel 5.3: Как использовать Auth в Service Provider?

public function boot() 
    { 
     $basket_count = 0; 
     if (Auth::check()) { //always false 
      $loggedin_user_id = Auth::user()->id; 
      $basket_count = Cart::getBasketCount(); 
     } 
     view()->share('basket_count', $basket_count); 
    } 
+0

Я думаю, вы нужно использовать «Слушатель событий» Laravel. https://laravel.com/docs/5.3/events –

+0

Попробуйте что-то вроде этого: 'use Illuminate \ Support \ Facades \ Auth;' 'public function boot ($ guard = null)' '$ auth = Auth :: guard ($ guard); ' ' $ auth-> guest() true или false' '$ auth-> user()' – Froxz

+0

@Froxz 'guest' is true – Volatil3

ответ

2

OK оказывается, что ServiceProviders не место для таких вещей. Лучше всего Middleware. Поэтому, если вы хотите вызвать Auth, создайте промежуточное программное обеспечение и передайте значение представлениям.

public function handle($request, Closure $next) 
    {    
     $basket_count = 0; 
     if ($this->auth) { //always false 
      $loggedin_user_id = $this->auth->user()->id; 
      $basket_count = Cart::getBasketCount($loggedin_user_id); 
     } 
     view()->share('basket_count', $basket_count); 

     return $next($request); 
    } 
0

Вы можете использовать аутентификацию непосредственно в файле контроллера. Добавление его в промежуточное ПО является более чистым способом аутентификации.

Для примера. В CategoriesController.php

...

класс CategoryController расширяет контроллер {

/** 
* CategoryController constructor. 
*/ 
public function __construct() 
{ 
    $this->middleware('auth'); 
} 

...

Если вы хотите взглянуть на полный пример http://deepdivetuts.com/basic-create-edit-update-delete-functionality-laravel-5-3