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