目前,我在拉拉维尔的航线上遇到了一些问题。例如,我有以下网址:
example.com/ads/all/experience:10-30;/wo/page-5其中params分别是控制器、类别、滑块vars (不介意奇怪的格式,而是生成的javascript )、教育程度和页面(数字)。
为了使这个url正确运行,我使用以下路由:
Route::get ( 'ads/{category}/{sliders?}/{education?}/{page?}' , 'AdsController@getIndex' )
-> where ( 'sliders?' , '(hours|experience):([0-9]+)-([0-9]+);' )
-> where ( 'education?' , '(mbo|hbo|wo)' )
-> where ( 'page?' , '(page-|page)([0-9])*' );现在的问题是:我希望人们能够只进入一个部分的网址。例如:
example.com/ads/all/page-5只需显示第5页列出的所有广告。或:
example.com/ads/all/wo/page-3这将显示所有的教育水平'wo‘的广告,列在第3页。
我希望这样做,因为我使用了参数'?‘的可选选项。因为laravel会自动识别某个参数不满足时的正则表达式,控制器会得到这样的结果:
getIndex ( $categories = 'all' , $sliders = null , $education = 'wo' , $page = '3' )但不幸的是,事实并非如此。任何人都对如何解决这个问题有任何想法(除了重新排序参数,这不是一个选项)。
发布于 2014-02-09 14:33:24
所以最终我设法让它使用这段代码。希望它也能帮到别人。
Route::get ( 'ads/{category}/{a?}/{b?}/{c?}' , function ( $category , $a = false , $b = false , $c = false )
{
$params = array ( $a , $b , $c );
$slider = $education = $page = false;
foreach ( $params as $p )
{
if ( $p && preg_match ( '/(mbo|hbo|wo)/' , $p ) )
{ $education = $p; }
elseif ( $p && preg_match ( '`^[a-zA-Z0-9+/]+={0,2}$`' , $p ) )
{ $slider = $p; }
elseif ( $p && preg_match ( '/(page-|page)([0-9])*/' , $p ) )
{ $page = $p; }
}
return App::make ( 'AdsController' ) -> getIndex ( $category , $slider , $education , $page );
} );https://stackoverflow.com/questions/21658214
复制相似问题