デフォルト値が 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 オブジェクトに渡しているようです。私はこの解決策が好きではありません。誰かがより良い方法を知っていますか?