編輯我的帖子使其與Symfony Cookbook相似並添加了一些代碼。在Symfony2中處理大型表單集合的最佳方式
http://symfony.com/doc/current/cookbook/form/form_collections.html
注意,張貼在部分實體/表格碼是一樣的一個在上述鏈接的文檔。
我有一個「任務」實體,它鏈接到「標記」實體。爲了簡單起見,「任務」具有單個字段「描述」,並且「標記」具有單個字段「名稱」 。「標籤」鏈接到一個「任務」,而「任務」鏈接到許多「標籤」。
實體:
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';
}
}
但是,當我創建「標籤」的集合LA出現問題超過一千個元素。此時,表單需要數秒和數秒才能加載,並且有時會由於內存而崩潰。
$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);
錯誤不是來自主義,它很好地處理了整個事情,而是來自Symfony Form。
在這種情況下,使用Symfony2內置表單系統(使用Collections)處理我的表單,還是應該像過去一樣處理它,使用原始html輸入和服務器端驗證/保存?
發佈你的代碼,你指的是什麼部分的symfony文檔? – Squazic
我編輯了我的帖子,關於集合的關於Symfony Cookbook的鏈接。我的代碼在這裏沒有任何重要性,當我執行「$ this-> createForm」時,我只使用鏈接第一部分中描述的表單集合(所有「標記」實體都加載了我的「產品」實體)。 – elwood
你有沒有解決這個問題? – jrjohnson