Я разрабатываю веб-сайт, предлагающий услугу REST. Все действия GET в порядке и отображаются с использованием шаблона .json.twig, но мне трудно понять, как выводить ошибки формы, если запрос, созданный для создания новой записи, недопустим. Если я пытаюсь сделать простойКак обрабатывать недопустимые формы для ОТДЫХА?
return $form;
я получаю следующее исключение из SF:
"исключение": [{ "сообщение": "Не удалось найти шаблон \" SomeBundle: Клиенты: postCustomer.json.twig \ "}]
шаблон не существует, это правда, но я понятия не имею, как создать в формате JSON, чтобы сказать запрашивающего, что его запрос является неполным/уродливы.
Если я попробую что-нибудь еще, имея дело с представлениями, но без указания шаблона, результат будет таким же. Есть ли способ сделать это автоматически, чтобы, если форма была изменена, изменение также отражается на ошибке? Или способ рассказать FOSRestBundle/JMSSerializerBundle, чтобы разобраться с сериализацией? Перед переключением на ответы Twig ошибка была хорошо обработана, и я хотел бы вернуть ее обратно вместе с шаблонами Twig для обычных операций.
Для получения дополнительной информации, действия моего текущего контроллера является:
/**
* @ApiDoc(
* resource=false,
* input="SomeBundle\Form\CustomerType",
* description="Create a new customer",
* section="Customers",
* statusCode={
* 201="Action successful",
* 403="Authorization required but incorrect/missing information or insufficient rights",
* 500="Returned if action failed for unknown reasons"
* }
* )
*
* --View(template="SomeBundle:Customers:add.json.twig", templateVar="form", statusCode=400)
* @View(templateVar="form", statusCode=400)
* @param Request $request
* @return \FOS\RestBundle\View\View
*/
public function postCustomerAction(Request $request) {
$data = json_decode($request->getContent(), true);
$manager = $this->getManager();
$customer = new Customer();
$form = $this->getForm($customer);
//$form->submit($data);
//$manager->create($customer);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $manager->create($customer);
//
// return $this->redirectView($this->generateUrl('api_get_customer_internal', ['uuid' => $customer->getInternalUuid()], true),
// 201);
// }
return $form;
//return $this->handleView($this->view($form, 400));
//return \FOS\RestBundle\View\View::create($form, 400);
}
И конфигурация FOSRestBundle:
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener:
enabled: true
view:
view_response_listener: 'force'
formats:
json: true
templating_formats:
json: true
force_redirects:
html: true
failed_validation: HTTP_BAD_REQUEST
default_engine: twig
routing_loader:
include_format: false
default_format: json
serializer:
serialize_null: true
sensio_framework_extra:
view:
annotations: true