首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel路由:如果为空则跳过参数

Laravel路由:如果为空则跳过参数
EN

Stack Overflow用户
提问于 2014-02-09 11:01:14
回答 1查看 6.2K关注 0票数 0

目前,我在拉拉维尔的航线上遇到了一些问题。例如,我有以下网址:

代码语言:javascript
复制
example.com/ads/all/experience:10-30;/wo/page-5

其中params分别是控制器、类别、滑块vars (不介意奇怪的格式,而是生成的javascript )、教育程度和页面(数字)。

为了使这个url正确运行,我使用以下路由:

代码语言:javascript
复制
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])*' );

现在的问题是:我希望人们能够只进入一个部分的网址。例如:

代码语言:javascript
复制
example.com/ads/all/page-5

只需显示第5页列出的所有广告。或:

代码语言:javascript
复制
example.com/ads/all/wo/page-3

这将显示所有的教育水平'wo‘的广告,列在第3页。

我希望这样做,因为我使用了参数'?‘的可选选项。因为laravel会自动识别某个参数不满足时的正则表达式,控制器会得到这样的结果:

代码语言:javascript
复制
getIndex ( $categories = 'all' , $sliders = null , $education = 'wo' , $page = '3' )

但不幸的是,事实并非如此。任何人都对如何解决这个问题有任何想法(除了重新排序参数,这不是一个选项)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-09 14:33:24

所以最终我设法让它使用这段代码。希望它也能帮到别人。

代码语言:javascript
复制
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 );

} );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21658214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档