php – Symfony2 FOSRestBundle PUT Action FORM返回空结果
发布时间:2020-12-13 13:30:40 所属栏目:PHP教程 来源:网络整理
导读:我正在使用Symfony 2.2和最新版本的FOSRestBundle.所以我设法让大多数动作都能正常工作,但我似乎对FormBuilder有一个问题,即我正在传递PUT请求的请求. 我检查了请求对象,它来自我的Backbone.je模型??,因为它应该(.save())但是在绑定到表单后,实体返回只有id
我正在使用Symfony 2.2和最新版本的FOSRestBundle.所以我设法让大多数动作都能正常工作,但我似乎对FormBuilder有一个问题,即我正在传递PUT请求的请求.
我检查了请求对象,它来自我的Backbone.je模型??,因为它应该(.save())但是在绑定到表单后,实体返回只有id导致flush()抛出错误,因为必需的字段没有填补. 控制器中的操作: header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS '); header('Allow GET,OPTIONS '); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Content-Type,*'); use FOSRestBundleControllerFOSRestController; use FOSRestBundleControllerAnnotations as Rest; use FOSRestBundleRoutingClassResourceInterface; use FOSRestUtilCodes; use SymfonyComponentHttpFoundationRequest; use GreenthumbedApiBundleEntityContainer; use GreenthumbedApiBundleFormContainerType; class ContainerController extends FOSRestController implements ClassResourceInterface { /** * Put action * @var Request $request * @var integer $id Id of the entity * @return View|array */ public function putAction(Request $request,$id) { $entity = $this->getEntity($id); $form = $this->createForm(new ContainerType(),$entity); $form->bind($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); return $this->view(null,Codes::HTTP_NO_CONTENT); } return array( 'form' => $form,); } /** * Get entity instance * @var integer $id Id of the entity * @return Container */ protected function getEntity($id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('GreenthumbedApiBundle:Container')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Container entity'); } return $entity; } 被称为的表格: namespace GreenthumbedApiBundleForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolverInterface; class ContainerType extends AbstractType { public function buildForm(FormBuilderInterface $builder,array $options) { $builder ->add('name') ->add('description') ->add('isVisible') ->add('type') ->add('size') ->add('creationDate') ->add('userId') ; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'GreenthumbedApiBundleEntityContainer','csrf_protection' => false,)); } public function getName() { return 'greenthumbed_apibundle_containertype'; } } 到目前为止,我已经尝试了所有内容,但我对Symfony相当新,我无法理解为什么$实体不包含请求收到的值. 仅供参考:我尝试过手动操作,例如在实例化带有请求ID的Container类,并使用setter将值输入到它中并且它工作得很好,我只是想以正确的方式做事情,因为Symfony建议它应该完成. 非常感谢你提前.
尝试更改putAction中的以下行:
$form = $this->createForm(new ContainerType(),$entity); 至: $form = $this->createForm(new ContainerType(),$entity,array('method' => 'PUT')); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |