繁体   English   中英

Symfony用表单更新实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM