私の記事をSymfony Cookbookと似ているように編集し、いくつかのコードを追加しました。Symfony2の大きなフォームコレクションを処理する最良の方法
http://symfony.com/doc/current/cookbook/form/form_collections.html
部分に転記エンティティ/フォームコードは、上記連結DOCにおけるものと同じであることに留意されたいです。
「タグ」エンティティにリンクされている「タスク」エンティティがあります。単純にするため、「タスク」には単一のフィールド「説明」があり、「タグ」には単一のフィールド「名前」があります。 「タグ」は1つの「タスク」にリンクされ、「タスク」は多くの「タグ」にリンクされる。
エンティティ:
class Task
{
protected $description;
protected $tags;
public function __construct()
{ $this->tags = new ArrayCollection(); }
public function getDescription()
{ return $this->description;}
public function setDescription($description)
{ $this->description = $description; }
public function getTags()
{ return $this->tags; }
public function setTags(ArrayCollection $tags)
{ $this->tags = $tags; }
}
class Tag
{
public $name;
}
瞬間、私はsymfonyのクックブックで説明したように、一度にすべてのそれらを編集し、「タスク」の形で「タグ」のコレクションを使用します。
フォーム:
class TagType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\TaskBundle\Entity\Tag',
));
}
public function getName()
{
return 'tag';
}
}
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('description');
$builder->add('tags', 'collection', array('type' => new TagType()));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\TaskBundle\Entity\Task',
));
}
public function getName()
{
return 'task';
}
}
しかし、私はラ・「タグ」のコレクションを作成するときに問題が表示されます千要素よりも大きい。現時点では、フォームには秒や秒がかかりますが、メモリーによってクラッシュすることがあります。
$task = new Task();
$tag1 = new Tag();
$tag1->name = 'tag1';
$task->getTags()->add($tag1);
$tag2 = new Tag();
$tag2->name = 'tag2';
$task->getTags()->add($tag2);
//Create a couple thousand more item here ...
//The script crashes here, when the form is being created
$form = $this->createForm(new TaskType(), $task);
エラーは、すべてを非常にうまく処理するDoctrineからではなく、Symfonyフォームからです。
この場合、Symfony2ビルトインフォームシステム(コレクションあり)を使用してフォームを処理することをお勧めします。また、古くからのHTML入力やサーバー側の検証/保存?
あなたのコードとあなたが参照しているsymfonyドキュメントのどの部分を投稿しますか? – Squazic
私は、コレクションに関するSymfony Cookbookへのリンクを使って投稿を編集しました。私のコードはここでは重要ではありません。私は "$ this-> createForm"を実行すると、リンクの最初の部分(すべての "タグ"エンティティが私の "product"エンティティにロードされている)で説明したフォームコレクションを使用しています。 – elwood
あなたはこれを解決しましたか? – jrjohnson