2016-01-18 3 views
2

Я попытался вставить контракт Guard в конструктор, я попытался передвигаться. Но когда пользователь вошел в систему - Auth :: check() возвращает false.Auth :: check возвращает false в AppServiceProvider

В других файлах (кроме 1 глобального промежуточного программного обеспечения) Auth :: check() работает правильно. В промежуточном ПО - перемещение Auth. Проверка наверху помогла устранить проблему. В этом случае - он не работает.

Дополнительная информация: Это приложение было обновлено с 4.2. Раньше он использовал Confide.

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\ServiceProvider; 

class AppServiceProvider extends ServiceProvider 
{ 

     /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     if(Auth::check()) 
     { 
      $user = Auth::user(); 
      $messages=Message::where('read',0); 
      $messages->where(function ($query) use ($user) { 
       $query->where('to',$user->id)->orwhere('from',$user->id); 
      }); 
      $message_unread= $messages->count(); 

      $new_notifications= Notification::where('user_id',$user->id)->where('viewed',0)->count();    
     } 
     else 
     { 
      $message_unread=0; 
      $new_notifications=8888888; 

// его 888888 для целей тестирования.

 } 

     view()->share(([ 
      'message_unread'=>$message_unread, 
      'new_notifications'=>$new_notifications 
     ])); 
    } 

    /** 
    * Register any application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
+0

Возможный дубликат функций [Auth class и auth() doesnt работает в модели Eloquent. (Laravel 5)] (http://stackoverflow.com/questions/34835200/auth-class-and-auth-function-doesnt-works-in-eloquent-model-laravel-5) –

+0

Я проверю это. Спасибо. –

+0

Не удаляйте этот вопрос –

ответ

1

Вы должны переместить этот код на уровень контроллера. boot Метод обслуживания Laravel ServiceProviders служит для начальной загрузки сервисов, а не для реализации логики бизнес-процессов.

+0

Это возможное решение. Как сказал Томас Ким, это невозможно сделать так. Но мне нужны эти данные во всех взглядах. Какие у меня варианты? –

+0

Взгляните на https://laravel.com/docs/5.1/views#view-composers –

+0

Спасибо! Помогли кресты мои композиторы. –

1

Вы должны использовать авторизацию в в верхней части класса ServiceProvider

use Auth; 

Вместо

use Illuminate\Support\Facades\Auth; 
0

Кроме использования View Composer, можно также использовать промежуточное программное обеспечение, которое обрабатывается после того, как были загружены переменные сеанса:

<?php 
namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 

class SetViewVariables 
{ 
    protected $auth; 

    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    public function handle($request, Closure $next) 
    { 
     $user = $this->auth->user(); 
     view()->share('user', $user); 

     return $next($request); 
    } 

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