Laravel中的动态网址?

2022-08-30 18:32:12

我正在考虑为我的下一个项目切换到laravel

我的下一个项目可能是一个小型网站,其中包含一些静态页面,一个博客和一个项目经理,并将使用控制器而不是路由。

我很好奇的是,我如何在Laravel中管理动态路线。

基本上,我想在管理部分进行构建,这样我就可以轻松创建静态页面,并且静态页面将具有SEO重点网址,例如,http://domain.com/when-it-started 我不想为每个页面手动创建新的控制器或路由。

所以我想知道处理这个问题的最干净的方法是什么。

基本上,所有静态页面都将共享相同的视图,只需更改几个变量即可。

动态路由应与控制器一起使用,而不是与控制器一起使用。

例如,如果我们有一个带有函数的控制器,那么它应该通过 http://domain.com/about/staffaboutstaff

但是我们没有函数,所以调用 http://domain.com/about/players 应该检查数据库,看看动态路由是否存在并匹配。如果它确实显示,否则显示404页面。对于不存在的控制器也是如此。(例如,不会有控制器!playerswhen-it-started

选择的答案似乎在Laravel 4中不起作用。对此有什么帮助吗?


答案 1

对于Laravel 4,请执行此操作

Route::get('{slug}', function($slug) {
    $page = Page::where('slug', '=', $slug)->first();

    if ( is_null($page) )
        // use either one of the two lines below. I prefer the second now
        // return Event::first('404');
        App::abort(404);

    return View::make('pages.show', array('page' => $page));
});

// for controllers and views
Route::get('{page}', array('as' => 'pages.show', 'uses' => 'PageController@show'));

答案 2

您可以为作业使用路由通配符,可以从一个开始,如果您需要多个url段,请添加一个可选的,然后从slug中识别页面。(:any)(:all?)

例如:

Route::get('(:any)', function($slug) {
    $page = Page::where_slug($slug)->first();

    if ( is_null($page) )
        return Event::first('404');

    return View::make('page')->with($page);
});

推荐