Я пытаюсь отслеживать, что происходит в моем приложении. Для этого я создал этот класс:
class ChangeLogListener implements EventSubscriber
{
private $tokenStorage;
public function __construct(TokenStorage $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function getSubscribedEvents()
{
return array(
'postPersist',
'postUpdate',
'onDelete',
);
}
public function postPersist(LifecycleEventArgs $args)
{
# Avoid to log the logging process
if (!$args->getEntity() instanceof ChangeLog)
$this->createLog($args, 'creation');
}
public function postUpdate(LifecycleEventArgs $args)
{
$this->createLog($args, 'update');
}
public function preRemove(LifecycleEventArgs $args)
{
# Handle the log creation
$this->createLog($args, 'remove');
}
public function createLog(LifecycleEventArgs $args, $action)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$entity = $args->getEntity();
$user = $this->tokenStorage->getToken()->getUser();
$changes[] = $uow->getEntityChangeSet($entity);
$cl = new ChangeLog();
$cl->setDate(new \DateTime());
$cl->setUser($user);
$cl->setEntityName(get_class($entity));
$cl->setEntityId($entity->getId());
$cl->setAction($action);
$cl->setChangeset($changes);//<---change this
$cl->setDescription('');
$em->persist($cl);
$em->flush();
}
}
Но у меня проблемы с изменениями, я не знаю, как правильно записать их в БД и сделать читабельными. Может есть какие-то способы сделать это правильно?
Когда я пытаюсь сбросить изменения, я всегда получаю сообщение об ошибке:
String data, right truncated: 1406 Data too long for column 'change_set' at row 1"
Мой ChangeLog.orm.yml:
#...
fields:
changeSet:
type: array
#...






Сделайте var_dump($changes);die(); после вашей линии getEntityChangeSet() и выясните, что вы действительно хотите от этого набора данных. В настоящее время он слишком длинный для поля, в котором вы его пытаетесь сохранить. Его необходимо уменьшить.