Laravel路由:可选url段中的静态文本

时间:2014-09-08 20:34:20

标签: php url laravel-4

我正在将我网站的论坛部分迁移到Laravel 4.我自己管理分页。 (不是Laravel内置的)

我的网址目前使用以下格式:

example.com/forum
example.com/forum/page-1

我希望在迁移后保持这样。

我的路线看起来像这样:

Route::get('/forum/page-{page?}',
    array('uses' => 'ForumController@showForum', 'as' => 'forum'));

但是当我请求没有页码的页面时,它当然不起作用。

我可以像/forum/{pagetext?}-{page?}那样做,但我不想在我的Controller中捕获pagetext参数,并且我只想在使用URL :: route为页面构建URL时给出$ page参数()。

我在互联网上找到了很多例子,但总是有多个参数,没有静态的可选文本。

如何使这个“静态”部分也可选?

我正在考虑使用正则表达式中的可选组,例如/forum/(page-{page})?但是如何在Laravel中执行此操作?

1 个答案:

答案 0 :(得分:1)

如果你真的需要参数是可选的,我会将该路由的整个段作为一个参数,你可以使用正则表达式来强制执行它:

Route::get('/forum/{page?}', function($page = null) {
    echo 'On page ' . $page;
})->where('page', 'page-[\d]+');

此处的缺点是您必须从路线中获取数字页码。

正如@Jarek在评论中提到的,你也可以把它分成两个不同的路线:

Route::get('/forum', function() {
    echo 'Forum Index';
});

Route::get('/forum/page-{page}', function($page) {
    echo 'On page ' . $page;
})->where('page', '[\d]+');