【问题标题】:Best approach to duplicating a form on request in Symfony2在 Symfony2 中根据请求复制表单的最佳方法
【发布时间】:2013-09-26 19:07:14
【问题描述】:

我翻遍了所有地方,发现的答案有限,也许是因为它太明显了,根本不需要问。

我正在尝试创建一个表单。此表格的目的是允许会员向网站推荐其他人。您需要填写 first_name、last_name 和 email。问题是我希望他们能够一次发送多封电子邮件。所以我可能会有另一个按钮,上面写着“添加另一个”,然后它会复制表单(名字、姓氏和电子邮件)。

我查看了集合,我认为这是一个很好的选择,因为它允许您允许添加并允许您制作原型,但我不确定如何使其工作。我也考虑过嵌入,但我不是在寻找立即响应或验证,所以我认为这不是解决方案。

我知道将使用 javascript 来完成这项工作。

到目前为止我所拥有的...如果我很接近,请告诉我。

这是调用它的地方。

public function referralFormAction(Request $request, $hash)
    {
        if (isset($hash)) {
            $referral = new Referrals();
            $referralForm = $this->createFormBuilder($referral)
//I know that 'email' needs to be replaced with something different, an object?
                    ->add('email', 'collection', array(
                        'required' => false,
                        'allow_add' => true,
                        'prototype' => true,
//Not sure if I can set type like this.  
                        'type' => new ReferralType(),
                    ))
                    ->getForm();

            $referralForm->handleRequest($request);
            if ($referralForm->isValid()) {
                //do something

            }

            return $this->render('FuelFormBundle:Default:referralForm.html.twig', array('referralForm' => $referralForm->createView()));

        } else {
            throw $this->createNotFoundException('The product does not exist');
        }


    }

这是类型

class ReferralType extends AbstractType{

    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder->add('first_name', 'text', array());
        $builder->add('last_name', 'text', array());
        $builder->add('email', 'email', array());
        $builder->add('Send', 'submit');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Fuel\FormBundle\Entity\Referrals',
        ));
    }

    public function getName()
    {
        return 'referral';
    }

【问题讨论】:

    标签: php forms symfony controller


    【解决方案1】:

    这份关于How to Embed a Collection of Forms 的文档将教你如何做你所需要的;它非常不言自明,解释得很好。

    【讨论】:

      【解决方案2】:

      这个问题的答案很可悲。您在上面的问题中看到的内容是正确的,但是我没有在表单中填充任何数据,因此没有什么可显示的。故事的寓意是您要么需要填充数据以便它显示某些内容,要么需要添加 JavaScript 来完成该功能以便填充文本框。

      我最初确实在 Symfony2 Reference for Collections 中找到了这一行

      在这两种情况下,除非您的电子邮件数据,否则不会呈现任何输入字段 数组已包含一些电子邮件。

      但我忽略了它,因为我当时理解它的含义不同。

      我确实发现这是一个巨大的帮助https://groups.google.com/forum/#!topic/symfony2/DjwwzOfUIuQ

      当我无法弄清楚我的问题时,我给他发了消息,他回复了另一个有用的信息。

      $form = $this->createFormBuilder()
          ->add('foo', 'foo_type', array(
              'data_class' => 'Foo',
          )
          ->add('bar', 'bar_type', array(
              'data_class' => 'Bar',
          )
          ->getForm();
      
      $form->handleRequest($request);
      
      if ($form->isSubmitted() && $form->isValid()) {
          $foo = $form->get('foo')->getData();
          $bar = $form->get('bar')->getData();
      
          // do stuff
      }
      

      非常感谢 Bernhard 的帮助!

      【讨论】:

        猜你喜欢
        • 2012-09-07
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多