dongzhang2150 2019-02-08 10:33
浏览 47
已采纳

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

How can I set an user value on Gedmo\Blameable\BlameableListener in a Zend Expressive application?

The event subscribers are successfully added to the EventManager (see configuration file). The TimestampableListener is working as expected.

/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,
                ],
            ],
        ],
    ],
];

backend/App/Entity/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;

    // [..]
}

In the documentation it states:

Note that you need to set the user on the BlameableListener (unless you use the Symfony2 extension which does automatically assign the current security context user).

I'm not sure how to implement it. Somewhere I should be able to define a callable or class which handles setting a user value, but how?

  • 写回答

1条回答 默认 最新

  • dsklfsdlkf1232 2019-02-14 08:33
    关注

    I solved this by defining a BlameableUserValueHandlerInterface. Which must be implemented and passed to the authentication middleware. The middleware provides the current identity to a BlameableUserValueHandler which assigns it to the user value in the BlameableListener.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?