2

カスタムオプションを symfony フォームに渡す必要があります。ドキュメントの setp を順を追って実行しましたが、私のオプションは成功しません。

FormType

class AdvertType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $entityManager = $options['em'];
    }

    /**
     * {@inheritDoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {    
        $resolver->setRequired(array(
            'em',
        ));

        $resolver->setAllowedTypes(array(
            'em' => 'Doctrine\Common\Persistence\ObjectManager',
        ));
    }

    /**
     * {@inheritDoc}
     */
    public function getName()
    {
        return 'advert';
    }
}

これがコントローラーからのコードです。

$form = $this->createForm(new AdvertType(), new Advert(), array(
    'em' => $this->getDoctrine()->getManager(),
));

symfony は、オプションemが欠落しているという例外をスローします。

例外: 必要なオプション "em" がありません。

チュートリアルに従って、データ トランスフォーマーを追加しました: http://symfony.com/doc/current/cookbook/form/data_transformers.html

キャッシュをクリアして Web サーバーを再起動しましたが、何も機能しません。私は何を間違えたのですか?渡すための構成を見逃してい$optionsませんか? 渡したコントローラーの$options配列がbuildFormメソッドに到達しないようです。

Symfony v2.3.5 を使用しています。テストのために最新 (2.3.6) に更新しましたが、問題はまだ存在します。

乾杯。

4

2 に答える 2

3

私はあなたのコードをコピーし、それをうまく使いました (Symfony 2.3.6)。出来た!キャッシュをクリアする必要はありません。だから、何が悪いのかわからない。data_classフォームを Advert オブジェクトに制限したい場合は、リゾルバーにオプションを追加することも検討する必要があります。

    $resolver
        ->setDefaults(array(
            'data_class' => 'Your\Bundle\Entity\Advert',
        ))
    ;
于 2013-10-31T11:05:09.227 に答える
1

フォームを 2 回 (異なる方法で) 使用したため、間違った使用法が原因でエラーが発生しました。エラーの場所を間違えました。コードは一般的に正しいです。そのために残念。

于 2013-10-31T11:43:19.140 に答える