1

デフォルト値が 1 つのフォームがあります。

class GearType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('options')
            ->add('model', 'choice', array('choices' => $this->getModelChoices(), 'data' => 2));
    }

要件の 1 つは、再販業者が URL でパラメーターを渡すことによって、フォームに事前入力できることです。潜在的な顧客が電子メール、コミュニケーターなどへのリンクをコピーして貼り付けるのも便利な機能です.

私はこのようにしました:

    /**
 * @Route("/car/gear")
 * @Template()
 */
public function gearAction(Request $request)
{
    $form = $this->createForm(new GearType());

    if ($request->isMethod('POST')) {
        $form->bind($request);
        if ($form->isValid()) {
            return 'is valid';
        }
    } else {
        $get = $this->getRequest()->query->all();
        if (!empty($get)) {
            $normalizer = new GetSetMethodNormalizer();
            $form->setData($normalizer->denormalize($get, new Gear())); # look here 
        }
    }

    return array('form' => $form->createView());
}

残念ながら、フィールド「オプション」には常にデフォルト値があり、パラメーターとして渡される値ではありません。行を変更しようとしました # ここを見てください

        $gear =  $normalizer->denormalize($get, new Gear());
        $form = $this->createForm(new GearType(), $gear);

しかし、結果はありません。

ソリューションは追加のパラメーターを GearType オブジェクトに渡しているようです。私はこの解決策が好きではありません。誰かがより良い方法を知っていますか?

4

2 に答える 2

0

このスニペットを追加し、必要に応じて [ ] の間を変更します

        $form->bind($request);
        if ( [ passed parameters from querystring ] ){               //// New Code
            $form->getData()->setOptions( [ processed parameter ]);  //// New Code 
        }                                                            //// New Code
        if ($form->isValid()) {
            return 'is valid';
        }
于 2013-02-19T03:04:10.690 に答える
0

optionsフィールドが常にデフォルト値を持つ理由は、実際のクエリである可能性があります。非正規化してデータを直接設定する代わりに、elseフラグメントを次のように変更します。

} else {
    $form = $this->createForm(new GearType(), new Gear(), array(
        'validation_groups' => array('not-validating')
    ));
    $form->bind($request);
}

not-validatingフォームは、グループに関連付けられた検証に対してのみ検証されます。requiredこれにより、フォームがビルドされている場合に一般的なアラートが表示されなくなりGETます。

「検証グループ」に関するドキュメント: http://symfony.com/doc/current/book/forms.html#validation-groups

質問は次のようなものです: Symfony2 のエンティティ フォーム フィールドと検証?

于 2013-03-13T06:38:26.170 に答える