2

私は Symfony Forms と Doctrine MongoDb の組み合わせに完全に行き詰まっており、あなたの助けが必要です.

@EmbedMany と @Hash を持つ User クラスがあります。

/**
 * @MongoDB\Document
 */
class User
{
    /**
     * @MongoDB\EmbedMany(targetDocument="Project", strategy="set")
     */
    protected $projects;

    /**
     * @MongoDB\Hash
     */
    protected $schedule;
}

プロジェクト クラス:

/**
 * @MongoDB\Document
 */
class Project
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\String
     */
    protected $name;
}

Doctrine Document Manager で新しいレコードを保存した後、次の構造が得られました。

{
   "_id": "1",
   "projects": [
     {
       "_id": ObjectId("50d1c5116146a13948000000"),
       "name": "Project 1"
     },
     {
       "_id": ObjectId("50d069336146a10244000000"),
       "name": "Project 2"
     }
   ],
   "schedule": ["2012-12-01", "2012-12-04"]
}

また、データで満たされたプロジェクトとスケジュールの 2 つのコレクションもあります。

ユーザーを編集しようとすると、これらのコレクションのデータとユーザーが選択したアイテムを含む 2 つのチェックボックス リストを含むフォームを表示したいと考えています。このような:

例

問題は、@Embed および @Hash プロパティのフォームをどのように作成するかです。

私はさまざまな方法を試しました:

class UserFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('schedule', 'collection', array(
            'type' => 'choice',
            'options'  => array(
                'expanded' => true,
                'multiple' => true,
            ),
        ));
        $builder->add('projects', 'document', array(
            'class' => 'Acme\MyBundle\Document\Project',
            'property' => 'name',
        ));
    }

    public function getDefaultOptions(array $options)
    {
        return array('data_class' => 'Acme\MyBundle\Document\User');
    }
}

また

 $builder->add('schedule', 'choice', array(
        'expanded' => true,
        'multiple' => true,
 ));
 $builder->add('projects', 'collection', array(
        'type' => 'choice',
        'options'  => array(
            'expanded' => true,
            'multiple' => true,
        ),
 ));

これらのいくつかはエラーで失敗しました: Expected argument of type "array", "string" given。フォームのレンダリングに成功したものもありましたが、リスト内の項目が選択されていませんでした。

たぶん、カスタム データ トランスフォーマーを使用するか、これらのコントロールを手動でレンダリングする必要があります...

4

2 に答える 2

1

埋め込みドキュメントを使用するには、埋め込みドキュメントに Document ではなく EmbeddedDocument として注釈を付ける必要があります。ただし、実際には、ユーザー ドキュメント内のプロジェクトの注釈に ReferenceMany を使用したいようです。削除するドキュメントを選択する場合を除き、埋め込まれたドキュメントのリストから選択しても意味がありません。

于 2013-02-04T17:32:58.500 に答える