【问题标题】:Symfony2: Time-based Controller ActionSymfony2:基于时间的控制器动作
【发布时间】:2015-10-14 07:13:27
【问题描述】:

是否可以在注释中的 symfony2 中进行基于时间的链接/控制器操作?有一个开始和一个停止日期!? 例如:

    /**
     *@Route("/mylink", start="14.10.2015" stop="20.12.2015", name="mylink", schemes= { "http" })
    public function myLinkAction()
    {
     .....
    }

【问题讨论】:

  • 控制器内部的逻辑有什么问题?不,没有这样的选择。
  • 你想做什么?有只在特定时间有效的链接吗?
  • 是的,我把逻辑放在控制器中,时差正常……但我认为处理时间会很酷,当链接处于活动状态时,可以在注释中处理
  • 嗯,你可以随时构建自己的注解,看看这个链接,例如:php-and-symfony.matthiasnoback.nl/2011/12/…

标签: php symfony


【解决方案1】:

您不能以这种方式扩展@Route,而是使用defaults,我认为没有样板代码的最佳解决方案是控制器过滤器:

services.yml

services:
  time_range_route_filter:
    class: AppBundle\Services\TimeRangeRouteFilter
    tags:
      - { name: kernel.event_listener, event: kernel.controller, method: onFilterController }

DefaultController.php

class DefaultController
{
    /**
     * @Route("/", name="homepage", defaults={"start"="2015-01-01", "end"="2016-01-01"})
     */
    public function indexAction()
    {

    }
}

TimeRangeRouteFilter.php

class TimeRangeRouteFilter
{
    public function onFilterController(FilterControllerEvent $event) {
        $request = $event->getRequest();
        $attributes = $request->attributes;
        $routeParams = $attributes->get('_route_params');

        $end = $routeParams['end'];
        $start = $routeParams['start'];

        if(!/* in range */) {
            throw new NotFoundHttpException();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多