Witam. Proszę o pomoc w rozwiązaniu problemu z przekazaniem użytkownika tworzącego wpis w bazie przy pomocy SonataAdminBundle.
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");
}
....
Ten post edytował alfredNN 5.01.2017, 12:53:05