доступ к блейду, если он не прошел проверку подлинности, отображается как ошибка в Laravel - PullRequest
1 голос
/ 27 октября 2019

Страницу сообщений могут получить доступ не участники, поэтому я пытаюсь сделать ее доступной, но у меня появляется следующая ошибка:

Call to a member function postusers() on a non-object

Эта ошибка не отображается, если янабрал URL при аутентификации.

Метод postusers () в модели Users:

public function postusers()
    {
        return $this->hasMany('App\Postusr');
    }

Использование блэйда postusers ():

@if( Auth::user()->postusers()->where('post_id', $post->id)->where('follow', 1)->exists())

Я просто хочу получить доступэта страница, если я не аутизирован.

Ответы [ 3 ]

1 голос
/ 27 октября 2019

Вы можете сделать это с помощью директивы лезвия @ auth

@auth
@if( Auth::user()->postusers()->where('post_id', $post->id)->where('follow', 1)->exists())
@endauth
1 голос
/ 27 октября 2019

Проблема в том, что метод Auth::user() возвращает прошедшего проверку пользователя или ноль, если его нет. Таким образом, ошибка происходит, потому что вы звоните postusers() на ноль.

Чтобы исправить это, вы должны сначала проверить, аутентифицирован ли пользователь, а затем попытаться вызвать метод:

  1. Используйте директиву @auth, поэтому этот код будет выполняться только в том случае, еслипользователь аутентифицирован:
@auth
  @if(...)
@endauth
Проверьте, есть ли пользователь перед вызовом метода:

@if(Auth::user() && ...)

0 голосов
/ 28 октября 2019

Вам необходимо проверить, есть ли аутентифицированный пользователь, прежде чем пытаться совершать вызовы к объекту, который может не существовать:

@if (Auth::check())
    ... user is authenticated
@endif

@if (Auth::user())
    ... user is authenticated
@endif

Документы Laravel 5.2 - Аутентификация - Получение аутентифицированного пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...