Parâmetros opcionais de rota intermediária no Symfony 2
É possível no Symfony 2, definir rotas com 'intermediário'parâmetros opcionais.Vou usar outros dados da pergunta, por me apoiar usando o mesmo estilo, por exemplo:
localhost/ param 1 / param 2 / param 3 / param 4Exemplolocalhost/ param 1 / param 4localhost/ param 2 / param 4Porque tenho um problema em que nenhum dos meus parâmetros deve ser obrigatório e lógicas diferentes entram em jogo, subordinadas a esses parâmetros ativados.
Até agora, se eu não definir assim:
- localhost/ param 1 / param 2 / ...
(ausência de:parâmetro 3 / parâmetro 4)
Não consigo jogar com parâmetros intermediários e é uma solução menos flexível. Se os parâmetros anteriores aos opcionais (todos eles) não forem especificados, não será possível. Não quero criar rotas adicionais para o mesmo contexto se tiver uma visão mais limpa.
Este é o meu contexto de rota:
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
Estes são os critérios que eu busco:
Baixe os dados em váriosformatos (Opcional: 'txt' por padrão)Baixe dados para um específicoEu iria ou sem ele (Opcional: espreito tudo o que encontro para o período padrão: diariamente ou mensalmente)Especificamoscomeçar OU fim, começar E fim (Ambas as datas opcionais)Verifico no meu controlador os parâmetros vazios da rota e crio as consultas correspondentes (por padrão).
Parâmetros inicializados na minha classe 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');
}