php - Symfony2 事件监听器

标签 php symfony

所以,我试图弄清楚这些听众,但我在 symfony 站点上查找有关它们的任何信息时遇到问题..

最初,我想创建一个会在每次页面加载时触发的监听器...我认为这可能会对整体系统性能产生不利影响,所以我想让它只在以下位置触发:/和/otherpage

但同样,我在查找有关从何处开始使用监听器的任何信息时遇到了问题。任何帮助表示赞赏..所有这个听众将做的,是使用 Doctrine 检查数据库并根据它发现的内容设置 session ..

再次感谢任何帮助或建议。谢谢。

最佳答案

我做了类似的事情来检查子域没有改变。您可以将监听器作为服务放入配置文件中,如下所示:

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 }

我不太确定优先级是如何工作的,但我发现如果它设置得太高,它就不会在应用程序的其余部分之前运行。在我的待办事项 list 上进行更多研究。

这是一个监听器的外观示例。

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...

    }
}

我不确定将其设置为仅在某些页面上运行的最佳方法,但我最好的猜测是检查路由,并且仅在路由与您设置的任何内容匹配时才访问您的数据库。

希望这能让你开始!

格雷格

关于php - Symfony2 事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807092/

相关文章:

php - 使用 Mysql 和 PHP 统计类别列表中的帖子数量

php - WordPress child 主题 : How do I add a custom style sheet from my parent theme to my child theme?

php - 用于删除整个目录中起始字符和结束字符之间的所有文本的 Shell 脚本或命令

php - MySQL中的Count(id)转化为字符串

symfony - 使用 Symfony2 获取 Twig 模板中的环境名称

php - Symfony 3 设置测试数据库

php - 找不到PHP docker pdo_mysql驱动程序

ssl - Symfony2 中的 sfSslRequirementPlugin

javascript - 结合 php 变量和 js 参数

php - 使用 symfony2.3 进行单元测试验证器约束