это мой первый вопрос, поэтому, пожалуйста, несите меня.Создайте Event Listener для обновления другой таблицы базы данных
Как я могу реализовать прослушиватель событий PostPersist для обновления таблицы журналов при создании или обновлении заказа в таблице заказов с помощью Sonata.
Я понимаю, как использовать prePersist для добавления информации в ту же таблицу базы данных, как только я создам новый порядок. (См следующий фрагмент кода)
public function prePersist(LifecycleEventArgs $args)
{
$order = $args->getEntity();
if ($order instanceof PmodOrder) {
$user = $this->serviceContainer->get('security.token_storage')->getToken()->getUser();
if ($user) {
$order->setCreatedBy($user);
$order->setCreatedAt(new \DateTime(date('Y-m-d H:i:s')));
}
}
}
Но я не совсем понимаю, как я хотел бы сделать это при обновлении другой таблицы, потому что это не то же самое лицо.
В тот момент, когда создается заказ, (я думаю) postPersist должен обновить другую таблицу с идентификатором заказа и дополнительной информацией.
Я думаю, что-то между линиями вроде этого;
public function postPersist(LifecycleEventArgs $args)
{
$log = $args->getEntity();
if ($log instanceof PmodLog) {
$order = ....;
$user = $this->serviceContainer->get('security.token_storage')->getToken()->getUser();
$department = $this->serviceContainer->get('security.token_storage')->getToken()->getUser()->getDepartment();
if ($order) {
$log->setOrder($order);
$log->setCreatedBy($user);
$log->setCreatedAt(new \DateTime(date('Y-m-d H:i:s')));
$log->setDepartment($department);
$log->setAction("created");
}
}
}
Я не понимаю, как получить текущий заказ, в котором я занят. И как setAction будет чем-то другим, когда пользователь изменит порядок. Например, «отредактировано» или «одобрено». Мне не удалось получить документацию о Сонате, если я не пропущу что-то.
Помните, что я использую Sonata, иначе это было бы легко реализовать в моих собственных действиях Controller.
Благодарим за ответ. Я собираюсь попробовать это сейчас (не смог проверить его в выходные). Я не совсем понимаю, как это происходит с тем фактом, что Log - это полная другая сущность. –
Слушатель не является новой сущностью. Вы создаете прослушиватель, тогда вам нужно добавить аннотацию в верхней части сущности для прослушивания (здесь, Заказ), чтобы связать ее с вашим слушателем (см. Последний блок кода моего ответа). Но если вы хотите добавить новый объект, который служит для хранения всех модификаций, вы можете (например, класс OrderLog). –
Спасибо, я понял. –