Я работал над успокоительным API, я хотел бы знать, где я должен обрабатывать полезную нагрузку после проверки. Прямо сейчас это выглядит примерно так:
// src/Controller/ExampleController.php
public function create(Request $request, EntityManagerInterface $manager)
{
// the getPayload gonna return a object representing my data
// already validate, ready to be processed
$data = $this->getPayload()
$exampleEntity = new ExampleEntity();
$exampleEntity
->setUser($this->getUser())
->setBook($data->book);
$manager->persist($exampleEntity);
$manager->flush();
return new JsonResponse($example->getResult());
}
Мне посоветовали создать сервис для обработки данных и не использовать напрямую в контроллере. Я на самом деле хотел бы отделить данные вне контроллера, но тогда я должен создать службу для каждого контроллера? как то так:
// src/Controller/SomeController.php
public function create(Request $request, \App\Service\Example $example)
{
// the getPayload gonna return a object representing my data
// already validate, ready to be processed
$data = $this->getPayload()
$example->setPayload($data);
$example->process();
return new JsonResponse($example->getResult());
}
У меня есть другой вопрос, должен ли я проверять идентификаторы, например, если я получаю тело json, передающее идентификатор книги, если я создаю новое ограничение, чтобы проверить, существует ли книга, это потребует запроса в базе данных (потому что я проверяю полезную нагрузку автоматически, прежде чем она попадет в контроллер), и еще один запрос позже, чтобы фактически создать отношение. Пример:
// src/Controller/ExampleController.php
public function create(
Request $request,
ExampleReposiry $repository,
EntityManagerInterface $manager)
{
// the getPayload gonna return a object representing my data
// already validate, ready to be processed
$data = $this->getPayload()
$exampleEntity = new ExampleEntity();
$exampleEntity
->setUser($this->getUser())
// $data->book is only the id, not the actually object book
// this is the second time query for the object, the fist
// time was inside the custom constraint that validate
// to see if the id pass is valid.
->setBook($repository->findBy(['id' => $data->book]));
$manager->persist($exampleEntity);
$manager->flush();
return new JsonResponse($example->getResult());
}
Или вместо этого я просто предполагаю, что идентификатор прохода книги действителен, а если нет, я просто выбрасываю исключение?
Пост, которому я следую, чтобы автоматически проверять данные здесь