我做了类似的检查子域没有改变。你可以把监听器作为一个服务于你的配置文件,如下所示:
services:
page_load_listener:
class: Acme\SecurityBundle\Controller\PageLoadListener
arguments:
security: "@security.context",
container: "@service_container"
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 }
我不能完全肯定,如果它被设置得太高也不会休息之前运行我如何优先级的作品,但发现的应用程序。这是在我的待办事项清单上进一步研究。
下面是听众如何看的例子。
namespace Acme\SecurityBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class PageLoadListener extends controller
{
private $securityContext;
protected $container;
protected $query;
public function __construct(SecurityContext $context, $container, array $query = array())
{
$this->securityContext = $context;
$this->container = $container;
$this->query = $query;
}
public function onKernelRequest(GetResponseEvent $event)
{
//if you are passing through any data
$request = $event->getRequest();
//if you need to update the session data
$session = $request->getSession();
//Whatever else you need to do...
}
}
我不知道的将其设置为只对某些页面运行的最佳方式,但我最好的猜测是,检查路线,只打你的分贝它当路由匹配你设置的。
希望能让你开始!
Greg
感谢您的信息格雷格!我会玩一玩,看看我能想出什么......我甚至可以通过检查每个页面加载情况而得到解决办法(所有查询都会检查数据库以查看是否存在是今天为用户输入或不是)..再次感谢! – Justin
没问题。我不会过多担心它会在每次页面加载时调用监听器函数,它是一种非常小的服务,它不应该对性能产生任何影响,只是试着找出一种避免监听器每次碰到DB的方法除非它特别需要。让我知道你如何去,如果你有任何问题,很乐意尝试和帮助。 – greg
我正在做同样的事情,但如果在侦听器查询中找不到任何内容,我想将所有内容短路并重定向到“即将推出”模板页面。关于如何在监听器中构建它的任何想法?谢谢! – Acyra