5

我正在使用 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');
        }
}

有任何想法吗?谢谢 :)

4

2 回答 2

10

正如 Rob 解释的那样,您需要执行以下操作:

在文件顶部:

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');
}
于 2013-07-05T08:01:48.583 回答
1

findOrFail()如果找不到页面,该方法将抛出异常。因此,如果将 a 包裹try { ... } catch() { ... }起来,则可以返回重定向视图。

于 2013-07-05T07:54:56.967 回答