Zmieniono mój post na podobny do Symfony Cookbook i dodano trochę kodu.Najlepszy sposób na obsługę dużej kolekcji formularzy w Symfony2
http://symfony.com/doc/current/cookbook/form/form_collections.html
Należy zauważyć, że jednostki/kod formularza umieszczonego w części jest taka sama, jak w dokumencie połączonego powyżej.
Mam jednostkę "Zadania", która jest połączona z jednostką "Tag". Aby zachować prostotę, "Zadanie" ma jedno pole "opis", a "znacznik" ma jedno pole "nazwa" .A "Tag" jest powiązany z jednym "Zadanie", a "Zadanie" jest powiązane z wieloma "Znacznikami".
Podmiot:
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;
}
Obecnie używam zbiór „Tagi” w postaci „Zadanie”, aby edytować wszystkie je naraz, jak to opisano w Symfony Książka kucharska
Postać:
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';
}
}
Ale problem pojawia się, gdy tworzę kolekcję "Tags" la ponad tysiąc elementów. W tej chwili formularz ładuje się w sekundach i sekundach, a czasami zawiesza się z powodu pamięci.
$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);
Błąd nie pochodzi z Doctrine, który obsługuje bardzo dobrze całość, ale z formularza Symfony.
Czy to dobry pomysł, aby obsłużyć mój formularz przy użyciu wbudowanego systemu formularzy Symfony2 (z kolekcjami) w tym przypadku, czy powinienem obsługiwać go tak jak dawniej, z surowymi wejściami html i sprawdzaniem/zapisywaniem po stronie serwera ?
Zamieść swój kod i jaką część dokumentów symfony masz na myśli? – Squazic
Edytowałem mój wpis z linkiem do Symfony Cookbook o kolekcjach. Mój kod nie ma tutaj znaczenia, używam tylko kolekcji formularzy, jak opisano w pierwszej części linku (wszystkie encje "znaczników" są ładowane z moją jednostką "produkt"), kiedy robię "$ this-> createForm". – elwood
Czy kiedykolwiek rozwiązałeś to? – jrjohnson