Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2015, 09:34
Avatar de anacona16
anacona16
 
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
Memoria agotada al renderizar form collection

Hola.

Tengo un formulario con un campo collection de tipo *ListadoDetallesType()* este form type tiene 22 campos, hasta aquí todo bien.

El problema viene cuando quiero editar mas de un registro al mismo tiempo, pasando a:

Código PHP:
Ver original
  1. $form = $this->createForm(new DetallesType(), $detalles);

Al hacer esto, cuando los detalles son mas de 30, obtengo el siguiente error:

Código PHP:
Ver original
  1. OutOfMemoryException in Profile.php line 143:
  2. Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2779493 bytes)

He notado que el problema se de debe al numero de campos del form type ListadoDetallesType(), porque si le dejo por ejemplo 5 campos no hay problema.

Para pasarle el arreglo de objectos $detalles a createForm me he guiado con un ejemplo que hay aca: http://sf2.showmethecode.es/app.php/...orms/user/edit

El codigo resumido es:

Código PHP:
Ver original
  1. $detalles = $this->get('detalles_repository')->findUltimosDetalles(15);
  2. $detallesContainer = new \AppBundle\Form\Model\Detalles($detalles);
  3.  
  4. $form = $this->createForm(new DetallesType(), $detalles);

Y la clase Detalles es:

Código PHP:
Ver original
  1. namespace AppBundle\Form\Model;
  2.  
  3. use Symfony\Component\Validator\Constraints as Assert;
  4.  
  5. class Nota
  6. {
  7.     /**
  8.      * @Assert\Valid()
  9.      */
  10.     public $notas;
  11.  
  12.     public function __construct($notas)
  13.     {
  14.         $this->notas = $notas;
  15.     }
  16. }

DetallesType.php:

Código PHP:
Ver original
  1. ...
  2. public function buildForm(FormBuilderInterface $builder, array $options)
  3. {
  4.     $builder
  5.         ->add('detalles', 'collection', [
  6.             'type' => new ListadoDetallesType(),
  7.         ])
  8.     ;
  9. }
  10. ...

ListadoDetallesType.php:

Código PHP:
Ver original
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3.     $builder
  4.         ->add('detalle1', null, [])
  5.         .... // 22 campos mas
  6.     ;
  7. }

En la plantilla twig:

Código HTML:
Ver original
  1. <form method="POST" role="form" {{ form_enctype(form) }}>
  2.     {{ form_widget(form) }}
  3.     <button type="submit" class="btn btn-success">Guardar</button>
  4. </form>

Al final esto se renderiza asi:
http://postimg.org/image/vnuwn1ubf/

Que debo hacer para evitar ese error? ¿O debo hacer este tipo de formulario de otra manera?

Espero que me puedan ayudar.

Gracias.
__________________
Aprendiendo!!!