如何为Silex或Symfony2路由设置两个默认值?

时间:2014-03-25 18:47:10

标签: symfony routes silex

我在Silex中定义了如下路线。我假设它可以在带有注释的symfony2中完成(概念上)。

$app->get('/get/all/entities/page/{page}/limit/{limit}', function ($page, $limit) use ($app) {

    // Build response 
    return new Response($response);

})->value('page', 1)->value('limit', 20);

使用上述默认值,如何在不指定pagelimit的情况下使用路线?

例如,如果我定义类似下面的内容,我可以浏览到http://www.exmpale.com/get/all/entities/page,一切都会好的,page的默认值为1

$app->get('/get/all/entities/page/{page}', function ($page) use ($app) {

        // Build response 
        return new Response($response);

    })->value('page', 1);

3 个答案:

答案 0 :(得分:1)

我尝试了以下内容:

$app->get('/page/{page}/{limit}', function($page, $limit) use ($app) {
    return 'Page: ' . $page . ', limit: ' . $limit;
})->value('page', 1)->value('limit', 30);

以下是我为不同网址获得的输出:

  • http://localhost:8888/playground/silex/web/page ---> Page: 1, limit: 30
  • http://localhost:8888/playground/silex/web/page/3 ---> Page: 3, limit: 30
  • http://localhost:8888/playground/silex/web/page/54/100 ---> Page: 54, limit: 100

因此,一切都按预期工作,值正确设置。您的网址存在的问题是参数之间的静态部分... {page} / limit / {limit}。如果你的参数之间有静态部分一切正常,除了你不能使用默认的第一个参数调用url,至少我不知道有任何可能的方法来做到这一点

答案 1 :(得分:0)

在Symfony2中,这可以非常容易地完成。占位符的默认值在路由文件中设置:

http://symfony.com/doc/current/book/routing.html#required-and-optional-placeholders

<强>更新

在您的情况下,路由文件中的条目看起来像这样(YAML):

your_route:
    path:      /get/all/entities/page/limit
    defaults:  { _controller: YourBundle:YourController:YourAction, page: 1, limit: 2 }

答案 2 :(得分:0)

来自symfony文档:

  

当然,您可以拥有多个可选的占位符(例如   / blog / {slug} / {page}),但是在可选占位符之后的所有内容   必须是可选的。例如,/ {page} / blog是一个有效的路径,但页面   将始终是必需的(即简单/博客将不符合此路线)。

http://symfony.com/doc/current/book/routing.html#required-and-optional-placeholders