Symfony2为特定路由动态分配控制器

时间:2016-06-16 16:29:08

标签: php symfony routing router

我不确定我是否以正确的方式处理此问题

我需要两个不同动作的相同路线模式,比如这个

/{category}

转到productAction和

/{brand}

转到brandAction(没有前缀)

对DB的查询会告诉我这个参数是哪种类型的实体然后我可以分配动作/控制器来处理它

  1. 我可以创建一个Action来处理这种模式并相应地重定向到另一个动作

  2. 我可以在kernel.controller 事件中创建一个监听器并相应地重新分配控制器

  3. 我可以使用 Symfony CMF ,但在我看来有点矫枉过正。

  4. 提前致谢

1 个答案:

答案 0 :(得分:0)

使用选项2工作,不确定这是否是最好的方法

    /**
 * @param FilterControllerEvent $event
 */
public function onKernelController(FilterControllerEvent $event)
{
    $routeService = $this->getRouteService();
    $params = $request->attributes->all();
    $slugs = array();

    foreach ($params as $key => $param) {
        if (preg_match('/slug*/', $key)) {
            $node = $routeService->findBySlug($param);
            if ($node !== null) {
                $slug['id'] = $node->getEntityId();
                $slug['type'] = $node->getEntityType();
                $slugs[] = $slug;
            }
        }
    }

    $request->request->set('slugs', $slugs);
}