相关疑难解决方法(0)

将安全上下文注入(实体侦听器)类时的循环引用

这里有两个问题,说注入整个服务容器应该解决这个问题.但是问题......见下文(注意尝试2和3之间的差异)......

试试1

public function __construct(SecurityContext $securityContext) {
    $this->securityContext = $securityContext);  
}  
Run Code Online (Sandbox Code Playgroud)

Curcular Reference.好的 ...

试试2

public function __construct(ContainerInterface $container) {
    $this->securityContext = $container->get('security.context');  
}  
Run Code Online (Sandbox Code Playgroud)

循环引用(为什么?,我在try 3中注入容器,除了我只有安全上下文)

试试3

public function __construct(ContainerInterface $container) {
    $this->container = $container;  
}  
Run Code Online (Sandbox Code Playgroud)

作品.

dependency-injection symfony

12
推荐指数
2
解决办法
5754
查看次数

Symfony2 - 将当前登录的用户注入侦听器

我正在尝试将当前登录的用户注入监听器.我的目标是每一个用户做任何操作(包括这段时间写的电流\日期时间()我的"demo_user"表"last_active"列方法不为我工作).

应用程序/配置/ config.yml

# ...
services:
    demo.listener:
        class: Demo\UserBundle\EventListener\ActivityWatcher.php
        arguments: ['@service_container']
        tags:
            - { name: doctrine.event_listener, event: postLoad }
Run Code Online (Sandbox Code Playgroud)

SRC /演示/ UserBundle /事件监听/ ActivityWatcher.php

namespace Demo\UserBundle\EventListener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Demo\UserBundle\Entity\DemoUser;

class ActivityWatcher
{

    protected $container;

    public function __construct(ContainerInterface $container)
    {   
        $this->container = $container;
    }


    public function postLoad(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        $entityManager = $args->getEntityManager();

        if ($entity instanceof DemoUser) {
            $token = $this->container->get('security.context')->getToken();
            $user = $token->getUser();

            if($entity->getId() == $user->getId()) {
                $entity->setLastActivity( new \DateTime() );
                $entityManager->persist($entity);
                $entityManager->flush(); …
Run Code Online (Sandbox Code Playgroud)

event-listener symfony security-context-token

8
推荐指数
1
解决办法
5457
查看次数

Symfony 2:获取控制器之外的安全上下文

我正在尝试编写一个需要访问用户权限级别的事件监听器.在控制器中,我使用以下代码

码:

$securityContext = $this->container->get('security.context');

if($securityContext->isGranted('ROLE_USER')){
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

但是在控制器之外我无法弄清楚如何获得安全上下文.可能吗?

php symfony

4
推荐指数
2
解决办法
1万
查看次数

Symfony2:注入@ security.context以获取当前用户.如何避免"ServiceCircularReferenceException"?注入整个容器?

来自这个帖子和修复后的东西我在另一个问题/安全问题/问题.

正如你在其他帖子中看到的那样,我正在尝试在监听器中注入安全上下文,但是如果我保持代码完整而没有触摸我得到了这个错误:

ServiceCircularReferenceException:检测到服务"doctrine.orm.default_entity_manager"的循环引用

因此,阅读和研究我找到了一个解决方案,但我不清楚它是否是正确的,或者它对我的应用程序是否安全.所以这就是我做的:

而不是注入[@security.context]我这样做:

services:
    orderhascomment.listener:
        class: PL\OrderBundle\Listener\OrderHasCommentListener
        arguments: [@service_container]
        tags:
            - { name: doctrine.event_listener, event: prePersist, method: onPrePersist }
Run Code Online (Sandbox Code Playgroud)

我的听众OrderHasCommentListener.php如下:

namespace PL\OrderBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface;

class OrderHasCommentListener {

    protected $container;

    public function __construct(ContainerInterface $container = null) {
        $this->container = $container;
    }

    /**
     *
     * @param LifecycleEventArgs $args 
     */
    public function onPrePersist(LifecycleEventArgs $args) {

        $entity = $args->getEntity();
        $user = $this->container->get('security.context')->getToken()->getUser();
        $entity->setUser($user);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?还是存在另一个?我认为注入整个容器是一个坏主意,因为我只需要安全上下文,那么解决方案是什么?(https://insight.sensiolabs.com/what-we-analyse)

试图在服务中转换UserCallable

我正在尝试UserCallable按照这里的说明转换服务,看看 …

security dependency-injection symfony doctrine-orm

4
推荐指数
1
解决办法
7736
查看次数

Symfony2 Sonata Admin访问容器

我有一个具有必需活动用户字段的实体,因此我需要在以下位置添加活动用户的名称configureFormFields():

class DokumentAdmin extends Admin
{    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
                ->add('email')
                 ...
                ->add('user_name',null,array('required' => true, 'data' => "THIS IS A LOGGED ADMIN NAME"))
        ;
    }
Run Code Online (Sandbox Code Playgroud)

我试图使用一个监听器,

public function prePersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        if ($entity instanceof Dokument) {
         //set user name

        }
    }
Run Code Online (Sandbox Code Playgroud)

但我现在不在这里如何使用容器对象.

php symfony symfony-sonata

1
推荐指数
1
解决办法
3127
查看次数