I’m trying to build app based on REST api ang AngularJS. I’ve been following this tutorial http://npmasters.com/2012/11/25/Symfony2-Rest-FOSRestBundle.html but have to change some details ( depreciated methods ) and right now when I post to create new entity I get ‘This form should not contain extra fields’ error.
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(), ) ); } }
my TaskType form:
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)) ; }
right now in my view I’m rendering only one form BUT I’M IN THE TEST STAGE:
{%extends 'MyBundle::layout.html.twig' %} {%block content %} <div ng-view></div> {{ form(form) }} {% endblock %}
AND this is the REST controller which is supposed to flush given entity:
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, ); }
WEIRD THING: when I put the same code from REST controller to MainController, then form is validated and new entity is being flushed, but somehow REST controller throws error…
Advertisement
Answer
Its because when you are generating the form you are adding submit buttons but when you are validating them you are not. try:
public function cpostAction(Request $request) { $entity = new Task(); $form = $this->createForm(new TaskType(), $entity)->add('submit','submit'); ...
The submit button is technically a field even though symfony wont map it to an entity property by default. So when you generate the form with a submit button and then submit that form the form you generate in your validation controller action needs to also have a submit button.