Я хочу проверить непрочитанные сообщения в моем приложении, как это было в «before filter» в laravel 4. Я поместил это в функцию загрузки в RouteServiceProvider.php
файл:
$unread_messages = 0;
if(Auth::check())
{
$unread_messages = Message::where('owner',Auth::user()->id)
->where('read',0)
->count();
}
View::share('unread_messages',$unread_messages);
Кажется, я не могу использовать Auth::check()
там. Я вошел в систему, но код внутри предложения if не используется. Приложение названо, и у меня есть use Auth;
в верхней части файла. Это вообще невозможно в этом файле, или это должна быть ошибка, которую я сделал?
Вы можете сделать это как Middleware, и добавить в App\Http\Kernel::$middleware
массив (после Illuminate\Session\Middleware\StartSession
).
<?php namespace App\Http\Middleware;
use Closure;
use App\Message;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\View\Factory;
class UnreadMessages
{
protected $auth;
protected $view;
public function __construct(Guard $auth, Factory $view)
{
$this->auth = $auth;
$this->view = $view;
}
public function handle($request, Closure $next)
{
$unread = 0;
$user = $this->auth->user();
if (! is_null($user)) {
$unread = Message::where('user_id', $user->id)
->where('read', 0)
->count();
}
$this->view->share('unread_messages', $unread);
return $next($request);
}
}
Читать дальше http://laravel.com/docs/5.0/middleware
Других решений пока нет …