如果我想创建路线,其中年,月和日是变量,如何定义如果这些变量为空,则应采用当前日期?
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) {
// ...
}
会抛出异常,因为缺少年,月和日。
有什么建议吗?
答案 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或按日期发布,您应该获得最后的帖子。