我正在将我网站的论坛部分迁移到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]+');