私は 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
。フォームのレンダリングに成功したものもありましたが、リスト内の項目が選択されていませんでした。
たぶん、カスタム データ トランスフォーマーを使用するか、これらのコントロールを手動でレンダリングする必要があります...