如何在Zend Expressive应用程序上下文中的BlameableListener中设置用户值?

时间:2019-02-08 10:33:54

标签: php doctrine-extensions zend-expressive

如何在Zend Expressive应用程序的Gedmo\Blameable\BlameableListener上设置用户值?

事件订阅者已成功添加到EventManager(请参阅配置文件)。 TimestampableListener正常工作。

/config/autoload/doctrine.local.php

<?php

declare(strict_types = 1);

use Gedmo\Blameable\BlameableListener;
use Gedmo\Timestampable\TimestampableListener;

return [
    'doctrine' => [
        // [..]
        'event_manager' => [
            'orm_default' => [
                'subscribers' => [
                    BlameableListener::class,
                    TimestampableListener::class,
                ],
            ],
        ],
    ],
];

后端/应用/实体/Role.php

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Blameable\Traits\BlameableEntity;
use Gedmo\Timestampable\Traits\TimestampableEntity;

/**
 * @ORM\Entity()
 * @ORM\Table(name="role")
 */
class Role
{
    use TimestampableEntity;
    use BlameableEntity;

    /**
     * @ORM\Id()
     * @ORM\Column(name="id", type="guid")
     * @ORM\GeneratedValue(strategy="UUID")
     * @var string
     */
    private $id;

    /**
     * @ORM\Column(name="name", type="string")
     * @var string
     */
    private $name;

    // [..]
}

documentation中指出:

  

请注意,您需要在BlameableListener上设置用户(除非您使用Symfony2扩展名,该扩展名会自动分配当前的安全上下文用户)。

我不确定如何实现它。我应该可以在某个地方定义一个可调用的或可用于设置用户值的类,但是如何?

1 个答案:

答案 0 :(得分:0)

我通过定义BlameableUserValueHandlerInterface解决了这个问题。必须实现并将其传递给身份验证中间件。中间件向BlameableUserValueHandler提供当前身份,该身份将其分配给BlameableListener中的用户值。