【问题标题】:Symfony 2 Validation FormSymfony 2 验证表
【发布时间】:2014-10-29 11:09:08
【问题描述】:

我是新手,需要一些帮助。

我在尝试验证表单时遇到问题。

在我的不同文件下方:

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>

我有两种情况: 如果在控制器中使用 bind($request),我有两个错误:

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

我不明白为什么会出现这个错误。

如果我使用handleRequest($request),什么都不会发生。

我的 symfony 版本更高 2.3,但 bindhas 一直有效。

当我在我的树枝代码中删除这部分并且我有 bind($request):

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

它的作品。

请你帮帮我。

提前谢谢你。

问候

【问题讨论】:

    标签: forms validation symfony bind


    【解决方案1】:

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

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

    另外,如果您想查看导致错误的原因,您可以在调用handleRequest 后对表单进行 var_dump:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2023-03-06
      • 2014-11-30
      相关资源
      最近更新 更多