Rebonjour,
je suis entrain de travailler sur les controllers en ce-moment, mais j'ai un probleme notament sur la creation et l'update des données.
Je ne comprend pas comment faire pour update seulement les données qui sont passées en params.
Je fais actuellement ca, mais ce qui me pose probleme c'est le PostType::class, car il faut que je passe tous les params de l'entity sinon il me fait une erreur.
Par exemple:
je passe en param seulement le content car je ne veux update que lui, j'ai l'erreur:
"Expected argument of type \"string\", \"null\" given at property path \"title\"."
bien que le titre soit deja remplit car c'est un update.
Est ce que je dois créer un PostType juste pour l'update ?
Est ce qu'il y a une autre méthode pour faire ca correctement ?
public function update(Request $request, ?Post $post): JsonResponse
{
if(!($post instanceof Post)){
return $this->NotFoundResponse();
}
if($post->isDeleted()){
$post->restore();
}
$form = $this->createForm(PostType::class, $post);
$this->processForm($request, $form);
$this->save($post);
return $this->response($post);
}
```
public function processForm(Request $request, FormInterface $form)
{
$request = $this->transformContent($request);
$this->submitForm($request, $form);
}
public function submitForm(Request $request, FormInterface $form)
{
$params = $request->request->all();
$clearMissing = $request->getMethod() != 'PATCH';
$form->submit($params, $clearMissing);
$this->validateForm($form);
}
public function validateForm(FormInterface $form)
{
if(!($form->isSubmitted() && $form->isValid())){
throw new ExceptionResponse($this->setErrors($this->transformValidations($form))->BadRequestResponse());
}
}
public function save($entity)
{
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($entity);
$entityManager->flush();
}
protected function transformContent(Request $request): Request
{
$data = json_decode($request->getContent(), true);
if($data === null){
throw new ExceptionResponse($this->BadRequestResponse());
}
$request->request->replace($data);
return $request;
}
Merci pour votre aide.