Symfony2 为特定路由动态分配控制器
Symfony2 dynamically assign controller for specific route
我不确定我是否以正确的方式解决这个问题
我需要相同的路由模式来执行 2 个不同的操作,就像这样
/{category}
去 productAction 和
/{brand}
前往 brandAction(无前缀)
对 DB 的查询会告诉我这个参数是哪种类型的实体,然后我可以分配 action/controller 来处理它
我可以创建一个动作来处理这个模式并相应地重定向到另一个动作
我可以在 kernel.controller 事件中创建一个 Listener 并相应地重新分配控制器
我可以使用 Symfony CMF 但在我看来太过分了。
提前致谢
使用选项 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);
}
我不确定我是否以正确的方式解决这个问题
我需要相同的路由模式来执行 2 个不同的操作,就像这样
/{category}
去 productAction 和
/{brand}
前往 brandAction(无前缀)
对 DB 的查询会告诉我这个参数是哪种类型的实体,然后我可以分配 action/controller 来处理它
我可以创建一个动作来处理这个模式并相应地重定向到另一个动作
我可以在 kernel.controller 事件中创建一个 Listener 并相应地重新分配控制器
我可以使用 Symfony CMF 但在我看来太过分了。
提前致谢
使用选项 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);
}