我正在尝试基于REST API Ang AngularJS构建应用程序。我一直在关注本教程http://npmasters.com/2012/11/25/Symfony2-Rest- FOSRestBundle.html,但是必须更改一些详细信息(折旧的方法),现在当我发布创建新实体时, “此表单不应包含其他字段”错误。
class MainController extends Controller { public function indexAction(Request $request) { $form = $this->createForm(new TaskType(),null,array('action' => $this->generateUrl('post_tasks').'.json')) ->add('submit','submit'); $note_form = $this->createForm(new NoteType()) ->add('submit','submit'); return $this->render('MyBundle:Main:index.html.twig', array( 'form'=>$form->createView(), 'note_form'=>$note_form->createView(), ) ); } }
我的TaskType表格:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('timeStart','datetime',array( 'date_widget' => 'single_text', 'time_widget' => 'single_text', 'date_format' => 'yyyy-MM-dd', 'data' => new \DateTime('now') )) ->add('timeStop','datetime',array( 'date_widget' => 'single_text', 'time_widget' => 'single_text', 'date_format' => 'yyyy-MM-dd', 'data' => new \DateTime('now') )) ->add('project') ->add('descriptionTask') ->add('isCompleted',null,array('required' => false)) ->add('isVisible',null,array('required' => false)) ; }
在我看来,现在我只渲染一种形式,但是 我 处于 测试阶段 :
{%extends 'MyBundle::layout.html.twig' %} {%block content %} <div ng-view></div> {{ form(form) }} {% endblock %}
并且这是应该刷新给定实体的REST控制器:
public function cpostAction(Request $request) { $entity = new Task(); $form = $this->createForm(new TaskType(), $entity); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); return $this->redirectView( $this->generateUrl( 'get_organisation', array('id' => $entity->getId()) ), Codes::HTTP_CREATED ); } return array( 'form' => $form, ); }
奇怪的事情: 当我将相同的代码从REST控制器放到MainController时,然后验证表单 并刷新新实体,但是REST控制器以某种方式抛出错误…
这是因为在生成表单时要添加提交按钮,而在验证它们时却没有。尝试:
public function cpostAction(Request $request) { $entity = new Task(); $form = $this->createForm(new TaskType(), $entity)->add('submit','submit'); ...
从技术上讲,即使默认情况下,即使symfony不会将其映射到实体属性,提交按钮也是一个字段。因此,当您使用提交按钮生成表单,然后提交该表单时,您在验证控制器操作中生成的表单也需要有一个提交按钮。