Symfony @Paramconverter и обновление сущности через FormType завершаются неудачно

Я строю REST API с Symfony 2.7.2, используя Doctrine, FOSRestBundle и JMSSerializerBundle. Я создавал контроллер для своего класса Address, используя этот образец.

Моя проблема заключается в том, что использование стандартного id-> entity ParamConverter и передача преобразованного Entity в тип формы для его обновления приводит к сбою проверки, как показано ниже. НО, если я заменю его $ id старой школы и сам получу объект из репозитория, он будет работать нормально.

Это ошибка или я что-то пропустил?

Соответствующий код следует.

Итак, у меня есть метод контроллера для получения (HTTP GET) сущности по id:

/**
* @Route("addresses/{id}", requirements={"id" = "\d+"}, name="base_address_entity")
* @Method({"GET"})
*/
public function detailAction(Address $address)
{
return $address;
}

(работает отлично)

Еще одно действие для создания новой сущности (HTTP POST)

/**
* @Route("addresses")
* @Method({"POST"})
*/
public function insertAction(Request $request)
{
return $this->processForm(new Address(), $request);
}

(тоже отлично работает)

..и действие обновления (HTTP PUT), используя идентификатор ParamConverter по умолчанию, как в DetailAction:

/**
* @Route("addresses/{id}", requirements={"id" = "\d+"}, name="base_address_create")
* @Method({"PUT"})
*/
public function updateAction(Address $address, Request $request)
{
return $this->processForm($address, $request);
}

и этот не удается с неопределенной ошибкой формы:

"code": 400,
"message": "Validation Failed",
"errors": {
"errors": [
"This value is not valid."],
"children": {
...no errors in any of the of the other fields

Функция формы процесса одинакова для обоих insertAction а также UpdateAction:

public function processForm(Address $address, Request $request)
{
/** @var AddressRepository $addressRepository */

$form = $this->createForm($this->get('address.form_type'), $address);

$form->submit($request->get($form->getName()));

if ($form->isValid())
{
$addressRepository = $this->get('address.repository');
$addressRepository->save($address);
return $this->get('success');
}
return $form;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]