2012-04-01 19 views
6

Estoy usando el artículo de libro de recetas de symfony.com para implementar una opción de carga de archivos para las imágenes.Symfony2: Editar carga de archivo

Ahora quiero cargar otras imágenes a la entidad.

La estrategia por defecto para la edición es: 1. Fetch de DB 2. Inyectar en el Formulario 3. Persistir

De alguna manera esta estrategia ya no funciona cuando se utiliza la carga de archivos (doctrina no ejecuta los eventos)

¿Qué más podría hacer para editar los artículos con la imagen editable?

Respuesta

10

El libro de recetas no contiene las actualizaciones ,, en particular en el caso donde solo cambia el archivo.

En este caso, el evento PreUpdate no se activa, por lo que necesita para desencadenar $entity->preUpload() manualmente antes de la $em->persist($entity), por lo que la carga de archivos se maneja en cualquier caso (preUpload alterará $entity->path así ocurrirá la persistencia)

+0

Hola, tienes razón. Cuando no se actualiza ningún campo, los eventos de devolución de ciclo de vida no se activan :) – bodokaiser

+0

Si usa las DoctrineExtensions de Knp, puede usar Timestampable en la entidad que contiene la lógica de carga de archivos y usar $ entity-> updateTimestamps(); before $ em-> persist() para que actualice los campos ficticios que necesita;) –

7

Si cambia solamente el campo de carga del ciclo de vida no corre el método de carga, en el libro de cocina se informa de la solución en una caja de cotización de la siguiente manera:

las devoluciones de llamada PreUpdate y PostUpdate solamente se activan si hay un cambio en uno de los fie de la entidad ld que persisten Esto significa que, de forma predeterminada, si modifica solo la propiedad $ file, estos eventos no se activarán, ya que la propiedad en sí no está directamente persistida mediante Doctrine. Una solución sería usar un campo actualizado que haya persistido en Doctrine y modificarlo manualmente al cambiar el archivo .

agregar un campo ficticio para actualizar en el controlador antes de persistir evento como sugerir por esta duscussion:

https://github.com/symfony/symfony-docs/pull/564

public function setFile(UploadedFile $file) 
{ 
    $this->file = $file; 
    $this->updatedAt = new \DateTime(); 
} 
Cuestiones relacionadas