简体   繁体   中英

Symfony2 dynamically assign controller for specific route

I'm not sure if I'm approaching this problem in the correct way

I need the same route pattern for 2 different actions, like this

/{category}

going to productAction and

/{brand}

going to brandAction (without prefix)

A query to DB will tell me which type of entity this parameter is and then I can assign the action/controller to handle it

  1. I could create an Action to handle this pattern and redirect to another action accordingly

  2. I could create a Listener in kernel.controller event and reassign the controller accordingly

  3. I could use Symfony CMF but seems to me like overkill.

Thanks in advance

Got it working using Option 2, not sure if that is the best way to do it

    /**
 * @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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM