记录每个请求 Symfony

Jak*_*tre 5 php symfony doctrine-orm

我有一个 symfony 应用程序,我想ROLE_ADMIN在数据库中记录每个任务。我尝试添加一个新的捆绑包,但我不太确定如何将其加载到AppKernel.php. 您可以提供的任何指导都会非常有帮助。

DrK*_*Key 4

我将在事件上创建一个事件侦听器kernel.request,并检查请求是否来自具有ROLE_ADMIN.

首先创建服务并security.authorization_checker注入doctrine.orm.entity_manager

admin_log_listener:
    class: AppBundle\EventListener\AdminLogListener
    arguments: [ "@security.authorization_checker", "@doctrine.orm.entity_manager" ]
    tags:
        - { name: kernel.event_listener, event: kernel.request }
Run Code Online (Sandbox Code Playgroud)

然后创建事件监听器:

namespace AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use Doctrine\ORM\EntityManager;

class AdminLogListener {

    protected $authChecker;
    protected $entityManager;

    public function __construct(AuthorizationChecker $authChecker, EntityManager $entityManager)
    {
        $this->authChecker = $authChecker;
        $this->entityManager = $entityManager;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        if ($this->authChecker->isGranted('ROLE_ADMIN')) {
            // Use $this->entityManager to send query or call a repository function
            // Refer to http://www.doctrine-project.org/api/orm/2.5/class-Doctrine.ORM.EntityManager.html
        }
    }
}
Run Code Online (Sandbox Code Playgroud)