2

私の問題は次のとおりです。

データベースからデータを正常に取得するフォームビルダーのドロップダウンリストがあります。

 public function buildForm(FormBuilder $builder, array $options) {
            $builder->add('Statusname', 'entity', array('empty_value' => 'All','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },)) 
}

それは正常に動作します。しかし、カスタムデータを追加すると

'not closed' => 'Not closed'

ドロップダウンリストに

public function buildForm(FormBuilder $builder, array $options) {
            $builder->add('Statusname', 'entity', array('empty_value' => 'All','not closed' => 'Not closed','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },)) 
}

それは動作しません。誰かが理由を教えてもらえますか?

前もって感謝します。

4

2 に答える 2

5

FormBuilder::add() メソッドの 3 番目のパラメーターは、オプションの連想配列です。「閉じていない」は有効なオプションではないため、機能しません。

あなたの場合、カスタムコレクションを手動で作成し、「選択」タイプを使用する必要があります。機能させるには、エンティティ マネージャーをフォーム タイプに挿入する必要があります。これは最小限の例です。

class IssueType extends AbstractType
{
    private $entityManager;

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

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('Statusname', 'choice', array(
            'empty_value' => 'All',
            'required'    => false,
            'choices'     => $this->buildStatusNames(),
        )
    }

    private function buildStatusNames()
    {
        $choices = array();
        $types = $this
            ->entityManager
            ->getRepository('MyProject\EntityBundle\Entity\IssueStatusType')
            ->createQueryBuilder('es')
            ->orderBy('es.name', 'ASC')
            ->getQuery()
            ->getResult();

        foreach ($types as $type) {
            // I assume key is retrieved by getId
            $choices[$type->getId()] = $type->getName();
        }

        $choices['not closed'] = 'Not closed';

        return $choices;
    }
}
于 2012-04-25T13:25:24.537 に答える
0

エンティティ関係はエンティティ内で管理されます。ここでは、ユーザーの ID と読み取り可能な名前を含むビューのフォームを作成しています。

フォームが送信されたら、JF Simon が上で述べたように id を使用してオブジェクトを取得し、送信します。エンティティですべてが正しく設定されていれば、Symfony が残りの処理を行います。

于 2014-04-18T16:25:19.920 に答える