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
或者如果这个选项不适合你,那么你可以试试可选参数priority
。 symfony 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',
]);
}
例如简单的控制器:
/**
* @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
或者如果这个选项不适合你,那么你可以试试可选参数priority
。 symfony 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',
]);
}