Уведомления не возвращаются

#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. Я редактирую свой вопрос. Спасибо за ваш вклад.