[英]Symfony update entity with form
我正在使用基本的操作构建一个简单的restfull API。
我尝试通过PUT请求更新实体,但是我的表单无法验证,并且在发送放置请求时也没有错误。 我究竟做错了什么? 仅供参考,具有相同FormType的postAction确实有效!
EventController :: putEventsAction
/**
* Update excisting event.
*
* @return event
*/
public function putEventsAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$event = $em->find('JdsApiBundle:Event', $id);
if(!$event) {
$view = $this->view(["id" => $id], Codes::HTTP_NOT_FOUND);
return $this->handleView($view);
}
$form = $this->createForm(EventType::class, $event);
$form->handleRequest($request);
if ($form->isValid()) {
$em->persist($event);
$em->flush();
$view = $this->view($event, Codes::HTTP_OK);
return $this->handleView($view);
}
$logger = $this->get('logger');
$logger->info((string) $form->getErrors(true));
return (string) $form->getErrors(true);
// return array(
// 'form' => $form,
// );
}
事件类型
class EventType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('startDate', DateTimeType::class, array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd', // this is actually the default format for single_text
))
->add('endDate', DateTimeType::class)
->add('description')
->add('color')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
'data_class' => 'Jds\ApiBundle\Entity\Event'
));
}
}
尝试像这样在您的表单中添加PUT
方法:
$form = $this->createForm(EventType::class, $event, array('method' => 'PUT'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.