0

私はいろいろ調べて、限られた答えしか見つけられませんでした。

フォームを作成しようとしています。このフォームの目的は、メンバーがサイトに他の人を推薦できるようにすることです。first_name、last_name、および email を入力する必要があります。問題は、一度に複数のメールを送信できるようにすることです。したがって、おそらく「別の追加」という別のボタンがあり、フォーム (first_name、last_name、および email) が複製されます。

私はコレクションを見て、allow_add を許可し、プロトタイプを作成できるため、これは素晴らしいオプションだと思いましたが、それを機能させる方法がわかりません。埋め込みも検討しましたが、すぐに対応や検証を求めているわけではないので、これが解決策ではないと思います。

この作業を行うために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';
    }
4

2 に答える 2

0

これに対する答えはかなり悲しいです。上記の質問は正しいですが、フォームにデータを入力していないため、何も表示されません。この話の教訓は、データを入力して何かを表示するか、JavaScript を追加して関数を完成させ、テキスト ボックスに入力する必要があるということです。

コレクションのSymfony2リファレンスで最初にこの行を見つけました

どちらの場合も、メール データ配列にメールが含まれていない限り、入力フィールドは表示されません。

しかし、当時は別の意味だと理解していたので無視しました。

これは大きな助けになりました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
}

助けてくれたベルンハルトに感謝!

于 2013-09-27T19:29:54.237 に答える
0

フォームのコレクションを埋め込む方法に関するこのドキュメントは、必要なことを正確に行う方法を教えてくれます。それはかなり自明であり、非常によく説明されています。

于 2013-09-27T03:11:41.287 に答える