在索引中有一个动态可选路由参数

时间:2015-07-25 12:53:22

标签: php laravel

我用:

Route::controller('home', 'HomeController');

在我的路线中将所有路线链接到我的控制器。

我的控制器中有getIndex()功能,当我去'/ home'时执行。

我有一个案例,我想路由到'/ home / slug',但并非总是如此。

我尝试使用getIndex($slug),但它总是要求'/ home / index / {slug?}'。我不希望索引出现。

2 个答案:

答案 0 :(得分:4)

就文档而言,不可能使用隐式控制器(因为它似乎强制执行RESTFUL模式)。

但是你可以为此创建一条新路线:

   Route::get('home/{slug}','HomeController@slugedIndex');
   Route::controller('home', 'HomeController');

编辑:正如史蒂夫指出的那样,控制器方法必须在get方法之后,所以不会覆盖另一个。

答案 1 :(得分:4)

亚瑟的答案是:

Route::get('home/{slug}','HomeController@slugedIndex');
Route::controller('home', 'HomeController');

虽然它不起作用,因为任何事情都是在' home /'之后写的。现在将进入第一条路线(和HomeController @ slugedIndex)。

我找到了一个解决方法。我在routes.php中取出了这条路线:

Route::controller('home', 'HomeController');

然后在我的HomeController中,只要在控制器中找不到方法,我就会调用missingmethod()

这是缺少的方法:

public function missingMethod($parameters = array())
{
    $sSlug = is_string($parameters) ? $parameters : '';
    $oObject = Object::where('slug', $sSlug)->first();

    if ($oObject) {
        // slug code
    }
    else {
            // 404 code
    }
}