Существует приложение с API-платформой поверх Symfony 4. Я создал пользовательскую операцию , как рекомендовано .
Сущность
* @Api\ApiResource(
* normalizationContext={"groups"={"read_importation_demand"}},
* denormalizationContext={"groups"={"write_importation_demand"}},
* itemOperations={
* "get",
* "put",
* "delete",
* "workflow"={
* "method"="POST",
* "path"="/importation_demands/{id}/workflow",
*
* "controller"=ImportationWorkflowController::class,
* }
* })
Контроллер
public function __invoke(ImportationDemand $data, Request $request): ImportationDemand
{
$requestData = json_decode($request->getContent(), true);
$request->request->replace($requestData);
$workflow = $this->workflowsRegistry->get($data, 'presentacion_oferta');
$transicion = $request->get('transition');
$workflow->apply($data, constant("App\Enum\ImportationDemandWorkflowEnum::$transicion"));
$this->manager->flush();
return $data;
}
Я получаю описаниеи параметры перехода для установки в сущности workflow .Проблема в том, что когда я выполняю сброс в базу данных, атрибут описания в ImportedDemand устанавливается со значением полученного поля описания.Он может быть установлен только в сущности ImportedDemandWorkflow, но устанавливается в обоих.Как видно из кода, я никогда не устанавливал поле описания ImportedDemand.
Прослушиватель событий перехода
public function onWorkflowPresentacionOfertaEntered(WorkflowEvent $event)
{
$request = $this->container->get('request_stack')->getCurrentRequest();
$username = $this->container->get('security.token_storage')->getToken()->getUsername();
$user = $this->manager->getRepository(User::class)->loadUserByUsername($username);
/** @var ImportationDemand $solicitud */
$solicitud = $event->getSubject();
$workflow = new ImportationDemandWorkflow();
$workflow->setStatus($solicitud->getStatus())
->setDescription($request->get('description', 'No se introdujo una descripción para esta operación'))
->setAction($event->getTransition()->getName())
->setDoneAt(new \DateTime())
->setPerformer($user);
$solicitud->addWorkflow($workflow);
}
Предполагаемое поведение заключается в том, что поле описания будет установленотолько в сущности ImportedDemandWorkflow.
Почему api-платформа обновляет поле описания, если я, как утверждается, контролирую выполненную операцию?
Заранее спасибо!