【发布时间】:2020-07-28 10:15:38
【问题描述】:
在对项目进行 PUT 调用期间,我需要获取当前保存的值,以便将它们与请求参数进行比较。
假设 PUT 调用包含一个与当前保存的参数不同的name 参数。
我认为使用 $repository->findOneBy 获取实体会返回保存的值,但事实并非如此,我正在获取 PUT 参数值。
设置取自https://api-platform.com/docs/core/events:
const ALLOWED_METHOD = Request::METHOD_PUT;
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => [
['preWriteWorkflow', EventPriorities::PRE_WRITE],
],
];
}
public function preWriteWorkflow(GetResponseForControllerResultEvent $event)
{
$entity = $event->getControllerResult();
if (!($entity instanceof MyEntity)) {
return;
}
$route = "/{$entity->getId()}";
$result = $this->checkRequestFromControllerResult($event, $route);
if (!$result) {
return;
}
// Getting entity from repository in order to get the currently saved value
$savedEntity = $this->MyEntityRepository->findOneBy(['id' => $entity->getId()]);
// Both will return the Name value of the PUT call
// Shouldn't $savedEntity return the currently saved name ?
$entity->getName();
$savedEntity->getName();
}
这种行为背后的原因是什么?有没有办法在这种方法中注入eventArgs,以便我可以使用getEntityChangeSet 或hasChangedField?
【问题讨论】: