Modificato il mio post per essere simile a Symfony Cookbook e aggiunto del codice.Il modo migliore per gestire la raccolta di moduli di grandi dimensioni in Symfony2
http://symfony.com/doc/current/cookbook/form/form_collections.html
Si noti che il codice/modulo per le entità pubblicato nella parte è lo stesso di quello del documento linkato sopra.
Ho un'entità "Task", che è collegata a un'entità "Tag". Per semplificare, "Task" ha un singolo campo "descrizione", e un "tag" ha un singolo campo "nome" . Un "tag" è collegato a un "task" e un "task" è collegato a molti "tag".
Entity:
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;
}
Al momento, io uso una raccolta di "Tag" in forma "Task" per modificare tutti in una volta, come descritto in Symfony Cookbook:
Forma:
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';
}
}
Ma un problema appare quando creo una collezione di "Tag" la furfante di mille elementi. In questo momento, il modulo impiega secondi e secondi a caricarsi e talvolta si blocca a causa della memoria.
$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);
L'errore non viene da Doctrine, che gestisce molto bene tutto, ma da Symfony Form.
È una buona idea gestire il mio modulo utilizzando il sistema di moduli incorporato Symfony2 (con Collections) in questo caso, o dovrei gestirlo come ai vecchi tempi, con input HTML html e validazione/salvataggi lato server ?
Pubblica il tuo codice e quale parte dei documenti di symfony ti stai riferendo? – Squazic
Ho modificato il mio post con il link a Symfony Cookbook sulle collezioni. Il mio codice non ha importanza qui, sto solo usando le Collezioni di form come descritto nella prima parte del link (tutte le entità "tags" sono caricate con la mia entità "prodotto") quando faccio "$ this-> createForm". – elwood
Hai mai risolto questo? – jrjohnson