14

エンティティにバインドされたフォームがありますが、追加のマップされていないフィールドもあります: (FormType クラスから)

$builder
    ->add('name')
    ->add('qoh')
    ->add('serialNumber', 'text', array('mapped' => false, 'required' => false))

リクエスト URL から取得した情報をコントローラーの serialNumber フィールドに事前入力したいと考えています。私が見つけた最も近い方法は次のとおりです。

$form->setData(mixed $modelData)

しかし、API は「$modelData」の形式を指定しておらず、私が試したものは何も効果がありませんでした。

4

3 に答える 3

40

Symfony の IRC チャンネルの誰かが私にこの回答をくれましたが、彼らはここに投稿することを拒否しました:

$form->get('serialNumber')->setData($serial_number);

于 2013-10-18T11:08:08.413 に答える
10

Form Eventsを使用できます。たとえば、データベースのデータをマップされていないフィールドに設定する場合は、POST_SET_DATA を使用できます。

class AddNonMappedDataSubscriber implements EventSubscriberInterface
{
protected $em;

public function __construct(EntityManager $em)
{
    $this->em = $em;
}

public static function getSubscribedEvents()
{
    return array(
        FormEvents::POST_SET_DATA => 'postSetData'
    );
}

public function postSetData(FormEvent $event){
    $form = $event->getForm();
    $myEntity = $event->getData();

    if($myEntity){
        $serialNumber = $myEntity->getNumber();
        $form->get('serialNumber')->setData($serialNumber);
         }
     }
}
于 2016-04-14T07:08:31.720 に答える
8

twig のフィールドに事前入力できます ( Twig の Symfony 2 フォーム フィールドのデフォルト値を設定します)。

...

{{ form_widget(form.serialNumber, { value : serialNumber }) }}

...
于 2013-10-18T02:42:44.943 に答える