Tworząc wpis w bazie przy pomocy CRUD jest ok, ale nie mogę sobie poradzić w SonataAdmin
W CRUD pobieram w kontrolerze
$user = $this->container->get('security.token_storage')->getToken()->getUser(); $mark->setCreatedUser($user);
Problem rozwiązany, dopiero zauważyłem że próbowałem wstrzyknąć nazwę użytkownika zamiast obiekt.
Zostawiam rozwiązanie, może ktoś będzie potrzebował
app\config\services.yml
services: my.listener: class: XXX\YYY\Listener\EntityListener arguments: - "@security.token_storage" tags: - { name: doctrine.event_listener, event: prePersist } - { name: doctrine.event_listener, event: preUpdate }
XXX\YYY\Listener\EntityListener.php
<?php namespace XXX\YYY\Listener; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterfa
ce; use Doctrine\ORM\Event\LifecycleEventArgs; class EntityListener { private $tokenStorage; public function __construct(TokenStorageInterface $tokenStorage) { $this->tokenStorage = $tokenStorage; } public function prePersist(LifeCycleEventArgs $args) { $entity = $args->getEntity(); $entity->setCreatedUser($this->tokenStorage->getToken()->getUser()); } public function preUpdate(LifeCycleEventArgs $args) { $entity = $args->getEntity(); $entity->setUpdatedUser($this->tokenStorage->getToken()->getUser()); } }
w encji
namespace XXX\YYY\Entity; use Doctrine\ORM\Mapping as ORM; /** * * @ORM\Entity * @ORM\HasLifecycleCallbacks * * @ORM\Table(name="name_table") * @ORM\Entity(repositoryClass="XXX\YYY\Repository\name_table_Repository") */ class name_class { ... /** * @ORM\PrePersist */ public function onPrePersist() { $this->createdAt = new \DateTime("now"); } /** * Gets triggered every time on update * * @ORM\PreUpdate */ public function onPreUpdate() { $this->updatedAt = new \DateTime("now"); } ....