Foros del Web » Programando para Internet » PHP » Zend »

Zend_File_Transfer y Zend_Form::getValues()

Estas en el tema de Zend_File_Transfer y Zend_Form::getValues() en el foro de Zend en Foros del Web. Saludos corillo, Estaba haciendo unos cambios en el código y cuando modifiqué que tomara los datos usando Zend_Form::getValues, cuando hago @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver ...
  #1 (permalink)  
Antiguo 14/02/2011, 13:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Zend_File_Transfer y Zend_Form::getValues()

Saludos corillo,

Estaba haciendo unos cambios en el código y cuando modifiqué que tomara los datos usando Zend_Form::getValues, cuando hago
Código PHP:
Ver original
  1. $post = $form->getValues();
  2.  
  3. $pathToFile = realpath(APPLICATION_PATH . '/../public/files/');
  4. $upload = new Zend_File_Transfer_Adapter_Http;
  5. $upload->setDestination($pathToFile)
  6.     ->receive();
  7. $fullPathForUploadedFile = $upload->getFileName('img');
No suben las imagenes, pero si lo invierto
Código PHP:
Ver original
  1. $pathToFile = realpath(APPLICATION_PATH . '/../public/files/');
  2. $upload = new Zend_File_Transfer_Adapter_Http;
  3. $upload->setDestination($pathToFile)
  4.     ->receive();
  5. $fullPathForUploadedFile = $upload->getFileName('img');
  6.  
  7. $post = $form->getValues();
Ahí comienza a subir las imagenes, ¿Por qué no puedo usar de la primera forma?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #2 (permalink)  
Antiguo 14/02/2011, 13:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

El problema es que por defecto al llamar getValues() Zend sube el archivo, esta explicado en el Manual:
Cita:
Per default the file will automatically be received when you call getValues() on the form. The reason behind this behaviour is, that the file itself is the value of the file element.
$form->getValues();
Note: Therefor another call of receive() after calling getValues() will not have an effect. Also creating a instance of Zend_File_Transfer will not have an effect as there no file anymore to receive.
Si lo quieres hacer de la primera es mejor que pongas el siguiente flag en true setValueDisabled(true).

Por otro lado es mejor que uses los elementos directos que te brinda Zend_Form_Element_File en lugar de usar el adapter directamente un ejemplo sencillo es algo así:
Código PHP:
Ver original
  1. if ($form->isValid() {
  2.        $aValues = $form->getValues();
  3.  
  4.        $File = $form->file_element;
  5.        $File->setDestination($path);
  6.  
  7.        $File->receive(); // Aqui es donde se sube por lo que si quieres cambiar el destino, o el nombre lo puedes hacer antes.
  8. }

Saludos.
  #3 (permalink)  
Antiguo 14/02/2011, 13:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Ohhh, entonces estaba usando dos formas diferentes y con una la podía hacer desde el comienzo, o sea usando Zend_Form. Como recomendación ¿que se sugiere usar Zend_File_Transfer o Zend_Form para subir archivos?

Edito:
Según el manual dice
Cita:
It utilizes Zend_File_Transfer internally to provide this functionality, and the FormFile view helper as also the File decorator to display the form element.
By default, it uses the Http transfer adapter, which introspects the $_FILES array and allows you to attach validators and filters. Validators and filters attached to the form element are in turn attached to the transfer adapter.
Por eso es bueno usar solo Zend_Form
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 14/02/2011, 14:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Así es, es mejor usar directamente Zend_Form para eso, aunque yo en mis funciones no manejo el recibir los archivos directamente por la forma, si no dejo al modelo hacerlo, ya que es tarea del modelo donde van los archivos y su nombre.

Saludos.
  #5 (permalink)  
Antiguo 14/02/2011, 14:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

¿Podrías brindar un ejemplo, para así aprender o indicar algún lugar que tome de referencia para leer?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 14/02/2011, 14:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Un ejemplo de que concretamente? Saludos.
  #7 (permalink)  
Antiguo 14/02/2011, 15:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

¿De como lo haces con el modelo?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 14/02/2011, 20:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Bueno, si es como entendí. Indicas que trabajas los archivos en el área donde se colocar los modelos. Lo que no entiendo es que indicas que es donde van los archivos. Según he leído, las imagenes deben ir en el public y ahí es que no entiendo a lo que te refieres con que es tarea del modelo y que allí van los archivos y su nombre.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 14/02/2011, 21:51
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 12 años, 8 meses
Puntos: 20
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Que tal abimaelrc, lo que GatorV se refiere es que la logica de procesamiento de las imagenes deberia de ir en el modelo; esto es porque en MVC, el modelo es la capa de negocio de la aplicación.

En el metodo save de un modelo yo tengo:

Código PHP:
Ver original
  1. public function save(array $data)
  2.     {
  3.         $this->getForm()->addExtraElements();
  4.  
  5.         //saber si es un update para deshabilitar que los archivos sean requeridos
  6.         $img = $this->getForm()->getElement('NombreImagen');
  7.         if($data['idDestino'] > 0) {
  8.             $img->setRequired(false);
  9.         }
  10.  
  11.         //...
  12.  
  13.  
  14.         $data = $this->getForm()->getValues();
  15.         if($data['DiasSalida'][0] === 'todos') {
  16.             unset($data['DiasSalida'][0]);
  17.         }
  18.        
  19.  
  20.         $imagenes = $data['NombreImagen'];
  21.         if(!is_array($data['NombreImagen']) && isset($data['NombreImagen'])) {
  22.             $imagenes = array($data['NombreImagen']);
  23.         }
  24.  
  25.         //en subidas de imagenes se debe de manejar si es un update o delete.
  26.         $key = 0;
  27.         if(is_array($imagenes)) {
  28.             foreach ($imagenes as $img) {
  29.                 if($data['idImagen'][$key] > 0) {
  30.                     $multi->updateImagen($data['idImagen'][$key], $img);
  31.                 } else {
  32.                     $multi->addImagen($img);
  33.                 }
  34.                 $key++;
  35.             }
  36.         }
  37.        
  38.         if(is_array($data['idImagenBorrada'])) {
  39.             foreach($data['idImagenBorrada'] as $idImagen) {
  40.                 $multi->deleteImagen($idImagen);
  41.             }
  42.         }
  43.         //...
  44.        
  45.         return $this->getMapper()->save($this);
  46.     }

Tengo un modelo "multimedia" que se encarga de hacer la persistencia correspondiente para cada modelo que utiliza imagenes.

Espero que te ayude,

Saludos.
__________________
I see dead pixels
  #10 (permalink)  
Antiguo 15/02/2011, 00:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 14 años
Puntos: 2135
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Exacto es algo similar a lo que dice SergeMedina, solo que yo no paso el Form entero si no solo la ubicación temporal del archivo y la muevo a la ubicación final que esta definida por mi modelo.

Saludos.
  #11 (permalink)  
Antiguo 15/02/2011, 04:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Ahhh, yo habia entendido que era en el modelo que iban los archivos y lo que se estaba refiriendo es que es en el modelo donde se define que hacer. Fue una mala interpretacion. Gracias con ese ejemplo me das una idea más clara
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 15/02/2011, 16:03
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 11 años, 4 meses
Puntos: 44
Respuesta: Zend_File_Transfer y Zend_Form::getValues()

Gracias por las respuestas. A mi también me han sido de ayuda. Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:57.