2014-12-17 1 views
3

Извините, я не мог найти лучшего заголовка для этого вопроса.Laravel blade: if..else заявление ведет себя неожиданно

Я хочу показать "follow" или Ссылка "Редактировать профиль", зависит от того, просматривает ли пользователь, прошедший проверку подлинности, свой профиль или профиль другого пользователя.

Вот мой код лезвия:

@if(isLogedIn()) 
    @if($authedUser->id !== $profile->user()->find(1)->id) 
     {{link_to_action('[email protected]', 'Follow', $profile->user()->find(1)->id, ['class' => 'button radius'])}} 
    @else 
     {{link_to_action('[email protected]', 'Edit Profile', $authedUser->id, ['class' => 'button radius'])}} 
    @endif 
@endif 

Теперь, если я смотрю профили других пользователей все в порядке (if заявления просто работает, и я могу видеть Follow ссылки), однако, если я стараюсь следить за своими собственный профиль, laravel исключает исключение: Trying to get property of non-object. Дело в том, что $profile->user()->find(1)->id выбрасывает это исключение, потому что когда я жестко запрограммировал это целое число, все работало правильно.

Вот строка, которая вызывает исключение:

<?php if($authedUser->id !== $profile->user()->find(1)->id): ?> 

PS1: Проблема не вложен if с.

PS2: В этой ситуации мой код никогда не касается else.

EDIT: Вот ProfileController @ шоу:

public function show($userId) 
{ 

    try{ 
     $profile = $this->profileRepo->byForeignKey('user_id',$userId)->firstOrFail(); 
    }catch(ModelNotFoundException $e){ 
     throw new ProfileNotFoundException('profile not found'); 
    } 
    return View::make('profiles.show')->with('profile', $profile); 
} 
+0

Я уверен, что это потому, что '$ profile-> user() -> find (1)' возвращает 'null'. Зачем вам «найти (1)» в любом случае? – lukasgeiter

+0

'{{dd ($ profile-> user() -> find (1) -> id)}}' перед 'if' вызывает одно и то же исключение. Я думаю, что что-то не так с моим ProfileController, но я не понимаю, что это такое. –

+0

, потому что мне нужен идентификатор пользователя. '$ profile-> user()' возвращает объект BelongsTo, поэтому я использовал 'find (1)' для получения объекта User. –

ответ

2

Из комментариев: ". Потому что мне нужно идентификатор пользователя $profile->user() возвращает BelongsTo объект, поэтому я использовал find(1), чтобы получить объект пользователя"

В этом случае вы можете использовать динамическое свойство user вместо вызова user().

@if($authedUser->id !== $profile->user->id) 

Что такое же, как

@if($authedUser->id !== $profile->user()->get()->id) 

Но вы не можете использовать find(1) здесь. Он попытается найти объект с id = 1

+0

Спасибо @lukasgeiter, он работает. –