Symfony,控制器和包之间的路由冲突

Symfony, route conflicts between controller and bundle

例如简单的控制器:

    /**
     * @Route("/{identifier}", name="page")
     */
    public function page(Request $request, string $identifier)
    {
        $page = $this->pageRepository->findOneBy(['identifier' => $identifier]);

        if (!$page || !$page->getEnabled()) {
            throw $this->createNotFoundException();
        }
        
         return $this->render('cms/index.html.twig', []);
     }

并且有一个管理页面 elfinder 中的图像的捆绑包,它将进入 /elfinder link.

我的控制器没有获取捆绑包控制器,而是获取了。

/{identifier} === /elfinder

人们在这种情况下通常会怎么做?

我尝试设置不同的优先级,但没有帮助

尝试在 annotations.yaml 文件中添加具有所需优先级的控制器。因此,如果您在第一个中获得 404,Symfony 将尝试从下一个控制器打开路由

将您的控制器添加到 config/routes/annotations.yaml

page:
    resource: App\Controller\_YourFistController_
    type: annotation

elfinder:
    resource: FM\ElfinderBundle\Controller\ElFinderController
    type: annotation

或者如果这个选项不适合你,那么你可以试试可选参数prioritysymfony doc

添加到配置文件config/routes.yaml:

elfinder:
    path: /elfinder/{instance}/{homeFolder}
    priority: 2
    controller: FM\ElfinderBundle\Controller\ElFinderController::show

我试过通过配置文件设置优先级。但不幸的是,它没有用。

唯一有帮助的是创建您自己的重定向方法

/**
 * @Route("/elfinder", name="elfinder", priority=10)
 */
public function elfinder()
{
    return $this->forward('FM\ElfinderBundle\Controller\ElFinderController::show', [
        'homeFolder'  => '',
        'instance' => 'default',
    ]);
}

/**
 * @Route("/efconnect", name="efconnect", priority=11)
 */
public function elfinderLoad(Request $request, SessionInterface $session, EventDispatcherInterface $dispatcher)
{
    return $this->forward('FM\ElfinderBundle\Controller\ElFinderController::load', [
        'session' => $session,
        'eventDispatcher' => $dispatcher,
        'request' => $request,
        'homeFolder'  => '',
        'instance' => 'default',
    ]);
}