#laravel #laravel-backpack #laravel-notification
#laravel #laravel-backpack #laravel-уведомление
Вопрос:
Я пытаюсь получить непрочитанные уведомления пользователя через мой контроллер.
Это работает:
public function notifications(){
return AppUser::find(auth()->user()->id)->unreadNotifications()->limit(5)->get();
}
Этого не происходит, возвращается пустая коллекция:
public function notifications(){
return auth()->user()->unreadNotifications()->limit(5)->get();
}
Не могли бы вы сказать мне, чего мне не хватает? Заранее спасибо.
Использование Laravel 5.8 с Backpack 3.5.
Защита авторизации по умолчанию в Laravel переопределена для использования аутентификации рюкзака в маршрутах рюкзака с использованием промежуточного программного обеспечения UseBackpackAuthGuardInsteadOfDefaultAuthGuard пакета диспетчера разрешений. В остальной части контроллера auth() и backpack_auth работают нормально.
Ответ №1:
Попробуйте это:
public function notifications()
return Auth::user()->unreadNotifications()->limit(5)->get();
}
Как сказано в документах:
Вы можете получить доступ к аутентифицированному пользователю через фасад аутентификации:
В качестве альтернативы, как только пользователь аутентифицирован, вы можете получить доступ к аутентифицированному пользователю через экземпляр Illuminate Http Request. Помните, классы с подсказками по типу будут автоматически введены в методы вашего контроллера:
Комментарии:
1. не работает. Я должен также добавить, что я использую авторизацию Backpack.
Ответ №2:
Auth
и auth()
вероятно, здесь это не сработает, потому что вы используете Backpack для аутентификации Laravel, который использует защиту, отличную от той, которую использует Laravel по умолчанию.
Это, вероятно, сработало бы для вас:
backpack_user()->unreadNotifications()->limit(5)->get();
Если это работает, вот почему:
Если вы взглянете на project/vendor/backpack/base/src/helpers.php
, вы увидите, что backpack_user()
это псевдоним для backpack_auth()->user()
и backpack_auth
выполняет:
return Auth::guard(backpack_guard_name());
Это важный момент, потому что он использует защиту, определенную config/backpack/base.php
(которая есть backpack
по умолчанию), и использует ее вместо защиты Laravel по умолчанию web
.
Комментарии:
1. изменений нет. Я перезаписал защиту авторизации по умолчанию с помощью промежуточного программного обеспечения UseBackpackAuthGuardInsteadOfDefaultAuthGuard пакета backpack permission manager. В остальной части моего контроллера auth () работает нормально. Мои подозрения теперь относятся к моему пространству имен route. Я редактирую свой вопрос. Спасибо за ваш вклад.