2014-10-29 185 views
-1

我是新手,需要一些帮助。Symfony 2验证表格

我尝试验证表单时出现问题。

下面我不同的文件:

AmiAttrbType.php

<?php 

namespace Site\TestBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class AmiAttrbType extends AbstractType 
    { 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
     ->add('email','text', array(
      'required' => true, 
      'attr' => array(
      'placeholder' => 'Adresse Mail' 
     ))) 
     ->add('produitsAttrb','collection', array(
      'type' => new ProduitAttrbType() 
     )); 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Site\TestBundle\Entity\Ami' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'site_testbundle_amiAttrb'; 
    } 
} 

ProduitAttrbType.php

<?php 

namespace Site\TestBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class ProduitAttrbType extends AbstractType 
{ 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder 
      ->add('nom', 'hidden') 
      ->add('qte','integer', array(
      'required' => true 
      )); 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
    $resolver->setDefaults(array(
     'data_class' => 'Site\TestBundle\Entity\ProduitAttrb' 
    )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
    return 'site_testbundle_produitAttrb'; 
    } 
} 

Controller.php这样

public function attrbAction(Event $commande) 
{ 
    $ami = new Ami; 

    foreach($commande->getProduits() as $produit) 
    { 
     $ami->addProduitsAttrb(new ProduitAttrb($produit->getNom(),0)); 
    } 

    $form = $this->createForm(new AmiAttrbType(),$ami); 


    $request = $this->get('request'); 

    if($this->get('request')->getMethod() == 'POST') 
    { 
     $form->bind($request); 

     if ($form->isValid()) 
     { 

      $commande->addAmi($ami); 

      $em = $this->getDoctrine()->getManager(); 
      $em->merge($commande); 

      $em->flush(); 

      return $this->render('SiteTestBundle:Test:attrb.html.twig', array('commande' =>$commande, 'form' => $form->createView())); 
     } 
    } 

    return $this->render('SiteTestBundle:Test:attrb.html.twig', array('commande' =>$commande, 'form' => $form->createView())); 
} 

attrb.html.twig:

<tr> 
    <td class="attrb-new"> 
     <div class="row"> 
      <div class="col-xs-12"> 
       {{ form_widget(form.email) }} 
      </div> 
     </div> 
    </td> 
    {% for produit in form.produitsAttrb %} 
     <td class="attrb-newQte"> 
     {{ form_widget(produit.qte) }} 
     </td> 
    {% endfor %} 
    {{ form_rest(form) }} 
</tr> 

我有两个情况: 如果在控制器中,我使用绑定($要求),我有两个错误:

- Email empty (email has been entered) 
- Token invalid (token exist in my source code) 

我不明白为什么我有这样的错误。

如果我使用handleRequest($request),什么也没有发生。

我的symfony版本更高2.3但binds一直工作。

当我删除这部分在我的树枝代码,我有bind($request)

{% for produit in form.produitsAttrb %} 
     <td class="attrb-newQte"> 
     {{ form_widget(produit.qte) }} 
     </td> 
{% endfor %} 

它的作品。

请你帮帮我。

预先感谢您。

关于

回答

0

您应该将Request对象传递给操作,而不是从服务中获取它。像这样:

public function testAction(Request $request, $myOtherArgs) 
{ 
    .... 
    $form->handleRequest($request); 
    ... 
} 

另外,如果你想看看是什么导致了错误,你可以调用handleRequest后的var_dump形式:

var_dump($form->getErrors(true));