Symfony 2中的中间路由可选参数

时间:2014-02-13 22:15:32

标签: routing symfony-2.3 optional-parameters

要解决的问题

在Symfony 2中是否可以使用' intermediate '可选参数定义路由。 I'll use other question data,用于支持我使用相同的样式,例如:

  • localhost / param 1 / param 2 / param 3 / param 4

实施例

  • localhost / param 1 / param 4
  • localhost / param 2 / param 4

因为我遇到的问题是我的参数都不是强制性的,并且不同的逻辑起作用,从属于那些激活的参数。

直到现在,如果我不这样设置:
- localhost / param 1 / param 2 / ...

缺失: param 3 / param 4

我无法使用中间参数,这是一个不太灵活的解决方案。 如果未指定先前的可选参数(所有参数),我无法实现此目的。 如果视线更清晰,我不会为相同的背景创建额外的路线。

这是我的路线背景:

zk_time_download_with_all_parameters:
    pattern: /download/{format}/{id}/{start_date}/{end_date}
    defaults: { _controller: ZkTimeBundle:Empleado:download, format: txt, id: %employeeId%, start_date: %start_date%, end_date: %end_date% }
    requirements:
      id: -?\d+
      start_date: ^((\d{4})[/|-]?(\d{2})[/|-]?(\d{2}))*|(\d{2})[/|-]?(\d{2})[/|-]?(\d{4})$
      end_date: ^((\d{4})[/|-]?(\d{2})[/|-]?(\d{2}))*|(\d{2})[/|-]?(\d{2})[/|-]?(\d{4})$
      format: txt|xml|pdf

这些是我追求的标准:

  • 以多种格式下载数据可选:默认情况下为'txt'
  • 下载特定 ID 的数据或将其清除(可选:我查看我在默认期间找到的所有内容:每日或每月
  • 指定开始 结束开始 AND 结束< / em>(可选两个日期

我在我的控制器中检查路由空参数并创建相应的查询(默认情况下)。

在我的Extension类中初始化的参数:

    public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    //Route: /marca/{start_date}/{end_date}
    $today = date('d-m-Y');
    $today_object = new \DateTime($today);
    $total_days = $today_object->format('t');

    $month_start = $today_object->format('Y-m-1');
    $month_end = $today_object->format('Y-m-' . $total_days);

    $container->setParameter('month_start', $month_start);
    $container->setParameter('month_end', $month_end);
    $container->setParameter('start_date', $today);
    $container->setParameter('end_date', $today);
    $container->setParameter('format', 'txt');
    $container->setParameter('employeeId', 0);

    $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
    $loader->load('services.yml');
}

0 个答案:

没有答案