Laravel 4路线调节

时间:2014-10-20 14:16:28

标签: php laravel laravel-routing

在Laravel 4中我可以说我有这两条路线。第一条路线在数据库中查找slug,如果找不到slug,则转到其他路线。这是可能的,我将如何使其发挥作用?

Route::get('{slug}', 'SlugController@getBySlug');
Route::get('/about', 'AboutController@index');

3 个答案:

答案 0 :(得分:1)

在您的控制器中,在检查对象是否存在后,如果需要,请将重定向返回到第二条路径。

class SlugController extends BaseController {

    public function getBySlug($slug) {
        $obj = getObjectBySlug($slug);
        if (!obj) {
            return Redirect::to("/about");
        }
    }

}

答案 1 :(得分:1)

如果您只想使用静态about页面,则需要更改路线的顺序:

Route::get('/about', 'AboutController@index');
Route::get('{slug}', 'SlugController@getBySlug');

现在,如果网址为about,则会转到AboutController,否则会转到SlugController

答案 2 :(得分:0)

您可以离开路线获取网址上的内容,而不是检查是否存在。

如果slug存在,那么只需调用SlugController@getBySlug

如果slug不存在并且它被设置为" about"以外的任何东西,那么我们将重定向到相同的路由,并设置为slug参数,所以下次没有找到记录你的数据库与slug有关,虽然路线上的slu is是关于。

希望这是有道理的。

Route::get('{slug}', function($slug){
    //Check if slug exists, if yes than do
    $slug_exists = true;
    if($slug_exists){
        return Controller::call("SlugController@getBySlug");
    }else if(!$slug_exists && $slug == 'about'){
        return Controller::call("AboutController@index");
    }else{
        return Redirect::to("/about");
    }
});