Laravel 4: использование контроллера для перенаправления страницы, если сообщения не существует - пытался, но пока не удалось

Я работаю с Laravel 4, у меня есть страница, на которой отображаются сообщения, например. example.com/posts/1 показывает первый пост из БД.

Что я хочу сделать, так это перенаправить страницу в индекс, если кто-то попытается перейти по несуществующему URL-адресу.

например если поста номер 6 не было, то example.com/posts/6 должен перенаправить на example.com/posts

Вот что у меня есть, это вообще на ходу?

public function show($id)
{
        $post = $this->post->findOrFail($id);

        if($post != NULL)
        {
        return View::make('posts.show', compact('post'));
        }
        else
        {
            return Redirect::route('posts.index');
        }
}

Любые идеи? Спасибо :)


person Josh    schedule 05.07.2013    source источник


Ответы (2)


Как объяснил Роб, вам нужно будет сделать следующее:

В верхней части вашего файла:

use Illuminate\Database\Eloquent\ModelNotFoundException;

Затем в вашем методе show($id):

try
{
    $post = $this->post->findOrFail($id);

    return View::make('posts.show', compact('post'));
}
catch(ModelNotFoundException $e)
{
    return Redirect::route('posts.index');
}
person Community    schedule 05.07.2013
comment
Спасибо, Марк и @Rob Gordijn, это работает, но вы должны обязательно включить использование Illuminate\Database\Eloquent\ModelNotFoundException; знаете ли вы, есть ли лучшее место для использования Illuminate\Database\Eloquent\ModelNotFoundException; ? Кроме верхней части контроллера? - person Josh; 06.07.2013

Метод findOrFail() вызовет исключение, если страница не будет найдена. Поэтому, если вы оберните его try { ... } catch() { ... }, вы можете вернуть представление перенаправления.

person Rob Gordijn    schedule 05.07.2013