Я делаю отдых API-контроллер. У меня есть форма SliderApiType, в которой я передаю поля, которые я хочу редактировать. Если я пропущу только одно поле, например «label», то будет изменено только это поле, а все остальные поля в этой форме будут нулевыми.
Му форма:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('label', TextType::class, ['label' => 'Заголовок', 'required' => false])
->add('description', TextType::class, ['label' => 'Описание', 'required' => false])
->add('serialNumber', IntegerType::class, ['label' => 'Номер', 'required' => false])
->add('picture', IntegerType::class, [
'invalid_message' => 'picture is not a valid',
])
->add('send', SubmitType::class, ['label' => 'Отправить'])
;
$builder->get('picture')
->addModelTransformer($this->transformer);
}
Мой контроллер, в котором я выполняю действие редактирования:
public function edit(Slider $slideId, Request $request, EntityManagerInterface $em)
{
$form = $this->createForm(SliderApiType::class, $slideId);
$data = json_decode($request->getContent(), true);
$form->submit($data);
if (!($form->isSubmitted() && $form->isValid())) {
return $this->handleView($this->view($form->getErrors(true)));
}
$em = $this->getDoctrine()->getManager();
$em->persist($slideId);
$em->flush();
$context = new Context();
$context->addGroup('slider_create');
$view = $this->view($slideId);
$view->setContext($context);
return $this->handleView($view);
}
Если передать эти поля в json:
{
"label": "string",
"description": "string",
"picture": 1
}
Все работает хорошо!
Но если я передам этот JSON:
{
"label": "string"
}
Поле «метка» задает как «строка», а поля «описание» и «картинка» устанавливает ноль.
Как сделать так, чтобы, если я пропустил поле, только оно было отредактировано, а два других поля не были нулевыми?