Laravel 4.2继续路由

时间:2016-07-26 10:06:05

标签: php laravel laravel-4 laravel-4.2

想象一下,有以下网址结构:

someurl.axyz/{post-slug}
someurl.axyz/{page-slug}

post-slugpage-slug存储在唯一数据库表列中。使用Laravel 4.2处理路线的“最”优雅方式是什么(如果与Laravel v5.2存在差异)?

我使用绑定参数解决了这个问题。以下代码位于routes.php文件的底部。我想知道这项任务是否有更简单的解决方案。

Route::bind('directslug', function($value, $route) {
    $post = Post::where('slug', $value)->first();
    if ($post) {
        return $post;
    }
    $page = Page::where('slug', $value)->first();
    if ($page) {
        return $page;
    }

    throw new NotFoundHttpException;
});
Route::get('{directslug}', function(Post $post) {
    return $post;
});
Route::get('{directslug}', function(Page $page) {
    return $page;
});

App::missing(function($exception) {
    return Response::view('error.missing', array('title' => '404 Page not Found'), 404);
});

1 个答案:

答案 0 :(得分:0)

我使用route model binding处理所有内容,与您的解决方案相似。

在我看来,你应该为每条路线保留一个单独的模型,否则你最终会得到一个具有同一个页面的帖子的帖子......即使我确定你已经照顾到了这一点。你毕竟使用了两条不同的路线,如果有人正在寻找一个页面,你为什么要总是查询帖子?