如何在Symfony2路由中定义默认日期值?

时间:2013-09-13 08:30:10

标签: symfony routing

如果我想创建路线,其中年,月和日是变量,如何定义如果这些变量为空,则应采用当前日期?

E.g。像这样(不能肯定......)

blog:
    path:      /blog/{year}/{month}/{day}
    defaults:  { _controller: AcmeBlogBundle:Blog:index,
                    year:  current_year,
                    month: current_month
                    day:   current_day
               }

我考虑过定义两条不同的路线,比如这个

blog_current_day:
    path:      /blog
    defaults:  { _controller: AcmeBlogBundle:Blog:index }

blog:
    path:      /blog/{year}/{month}/{day}
    defaults:  { _controller: AcmeBlogBundle:Blog:index }

但是,如果我再调用blog_current_day我的控制器

public function indexAction(Request $request, $year, $month, $day) {
    // ...
}

会抛出异常,因为缺少年,月和日。

有什么建议吗?

2 个答案:

答案 0 :(得分:10)

动态容器参数

您可以在位于Acme\BlogBundle\DependencyInjection\AcmeBlogExtension的套装扩展程序中动态设置container parameters,之后您可以在路线中使用这些参数,例如%parameter%

扩展

namespace Acme\BlogBundle\DependencyInjection;

use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class AcmeBlogExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $container->setParameter(
            'current_year',
            date("Y")
        );

        $container->setParameter(
            'current_month',
            date("m")
        );

        $container->setParameter(
            'current_day',
            date("d")
        );
    }
}

路由配置

blog:
    path:      /blog/{year}/{month}/{day}
    defaults:  { _controller: AcmeBlogBundle:Blog:index, year: %current_year%, month: %current_month%, day: %current_day% }

静态参数

如果您只需要可配置的静态参数,只需将它们添加到config.yml

即可
parameters:
    static_parameter: "whatever"

...然后再次在您的路由中访问它们,例如%static_parameter%

答案 1 :(得分:2)

您可以在控制器中设置$year = null, $month = null, $day = null

或者可能在途中:

year:  null,
month: null,
day:   null,

然后在控制器中,如果变量= null或按日期发布,您应该获得最后的帖子。