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


Laravel routing: static text in optional url segment

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

我的URL当前使用以下格式:

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

迁移后我想保持原样。

我的路线是这样的:

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

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

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

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

我怎样才能使这个"静态"部分也是可选的?

我在想正则表达式中的一个可选组,比如/forum/(page-{page})?,但在Laravel中如何做到这一点?

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

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]+');