我想知道的是,我有一个管理面板,我可以通过管理员访问' admin'前缀,但只有在您首先进入配置页面时才能访问它。
为此目的,我已经创建了一个Listener事件,如下所示:
<?php
namespace Config\ConfigBundle\Listener;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class ConfigListener {
public function __construct(ContainerInterface $container){
$this->router = $container->get('router');
$this->em = $container->get('doctrine')->getEntityManager();;
}
public function onKernelRequest(GetResponseEvent $event)
{
$route = $event->getRequest()->attributes->get('_route');
if ( $route == 'admin') {
$config = $this->em->getRepository('ConfigBundle:Config')->findConfig();
if($config == null){
$event->setResponse(new RedirectResponse($this->router->generate('adminConfig')));
}
}
}
}
此代码工作正常,但是,它只获得名为&#39; admin&#39;的路由,我想要的是检查此路由的前缀,如果它等于&#39; admin& #39;重定向到配置页面。
我错过了什么,我不知道如何解决这个问题......
答案 0 :(得分:1)
您可以使用以下代码段检查路由是否包含“admin”前缀:
if (0 == strpos($route, 'admin')) {
// perform redirect
}