Я работаю над API отдыха, который использует FOSRestBundle и Symfony 4. У меня проблема с моими пользовательскими преобразователями параметров.
Для создания и обновления существует 2 пользовательских преобразователя параметров.Обновление Param Converter расширяет возможности создания Param Converter.У меня проблема с получением объекта должным образом.возвращаемый объект не имеет идентификатора, также любые другие связанные объекты (manyToOne или OneToOne) не преобразуются автоматически в нужный объект.
Это контроллер
/**
* @Post("/properties")
* @ParamConverter("property", converter="create_entity_from_request_body")
*
* @param Property $property
* @param PropertyManager $propertyManager
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function create(Property $property, PropertyManager $propertyManager)
{
$propertyManager->createProperty($property);
$location = $this->generateUrl('app_property_show', ['id' => $property->getId()]);
return $this->json($property, Response::HTTP_CREATED, ['Location' => $location]);
}
/**
* @Patch("/properties/{id}")
* @ParamConverter("property", converter="update_entity_from_request_body",
* options={"mapping": {"id": "id"}})
*
* @param Property $property
* @param PropertyManager $propertyManager
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function update(Property $property, PropertyManager $propertyManager)
{
$propertyManager->updateProperty($property);
return $this->json($property);
}
Это метод и конструктор применения преобразователя параметров создания
public function __construct(
FOSRequestBodyParamConverter $requestBodyParamConverter,
string $validationErrorsArgument = null
) {
$this->requestBodyParamConverter = $requestBodyParamConverter;
$this->validationErrorsArgument = $validationErrorsArgument;
}
/**
* @param Request $request
* @param ParamConverter $configuration
* @return bool
*/
public function apply(Request $request, ParamConverter $configuration)
{
$this->requestBodyParamConverter->apply($request, $configuration);
if ($this->validationErrorsArgument) {
$validationErrors = $request->attributes->get($this->validationErrorsArgument);
if (count($validationErrors) > 0) {
throw new ValidationException($validationErrors);
}
}
}
это преобразователь параметров обновления, который в основном расширяет возможности создания.one
public function __construct(
DoctrineParamConverter $doctrineParamConverter,
FOSRequestBodyParamConverter $requestBodyParamConverter,
string $validationErrorsArgument = null
) {
parent::__construct($requestBodyParamConverter, $validationErrorsArgument);
$this->doctrineParamConverter = $doctrineParamConverter;
}
/**
* @param Request $request
* @param ParamConverter $configuration
* @return bool|void
*/
public function apply(Request $request, ParamConverter $configuration)
{
//$this->doctrineParamConverter->apply($request, $configuration);
$options = $configuration->getOptions() + [
'deserializationContext' => [
'object_to_populate' => $request->attributes->get($configuration->getName()),
],
'validator' => [
'groups' => ['update'],
]
];
$configuration->setOptions($options);
parent::apply($request, $configuration);
}
Здесь у меня есть сущность основного объекта, которая связана с объектом Image с отношением OneToOne
/**
* @ORM\Column(type="string", length=200)
*/
private $name;
/**
* @ORM\OneToOne(targetEntity="App\Model\Entity\Image")
*/
private $logo;
Это то, что я отправляю в качестве запроса исправления для контроллера: (тамэто изображение в БД с ID = 1)
{
"name": "crap home",
"logo": "1"
}
Это то, что я вижу, когда выкидываю объект свойства, который вводится в контроллер
object(App\Model\Entity\Property)[385]
private 'id' => null
private 'name' => string 'crap home' (length=10)
private 'logo' => null