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

setHeader

Estas en el tema de setHeader en el foro de Zend en Foros del Web. Saludos corillo, Quiero indicar unas cabeceras genéricas en una aplicación y quiero saber la mejor forma de hacerlo. He pensado en varias maneras, pero no ...
  #1 (permalink)  
Antiguo 20/04/2011, 08:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
setHeader

Saludos corillo,

Quiero indicar unas cabeceras genéricas en una aplicación y quiero saber la mejor forma de hacerlo. He pensado en varias maneras, pero no sé si es lo indicado cualquiera de ellas o ninguna

Las cabeceras que quiero ingresar son
Código PHP:
Ver original
  1. header("Expires: Fri, 09 Mar 2001 10:17:17 GMT"); // Date in the past
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
  3. header("Cache-Control: post-check=0, pre-check=0",false);
  4. header("Cache-Control: no-store, must-revalidate"); // HTTP/1.1
  5. header("Pragma: no-cache"); // HTTP/1.0
El propósito es forzar al navegador cargar siempre todo. No me preocupa porque la aplicación es para verse en un intranet.

lo que he pensado hacer es
  • Colocar eso directamente en el index.php del public (fue el primer pensamiento que tuve, claro está sin investigar primero como hacerlo con Zend)
  • Luego vi que existe setHeader que está disponible en el objeto Zend_Controller_Response. Pero los ejemplos lo colocan en el controlador (logicamente) pero mi intensión es que se pueda hacer en toda la aplicación
  • Por lo que pensé que se puede lograr en el bootstrap, pero tengo una duda con respecto a esta forma. Si llego a colocar en el bootstrap los headers, ¿en alguna forma zend podría sobre-escribirlos?. Me refiero setHeader tiene un segundo argumento que dice $replace = false no sé si Zend sobre-escribiría lo que haya colocado en el bootstrap cuando hace los procesos que van despues del bootstrap.

Mi intensión es hacer que toda la aplicación se "re-cargue", no en una página en particular.
__________________
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 20/04/2011, 11:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: setHeader

Que tal abimael,

Me parece que lo mejor seria un plugin, que lea los headers de configuración, así podes activar, desactivar y setear los headers desde un .ini.

Con respecto a si Zend sobre escribiria algo, lo podria hacer si disparas alguna funcion que tenga que ver con los headers, por ejemplo el contexto JSON pero inclusive en este caso tenes el hook dispatchLoopShutdown que Zend dispara pero no utiliza, para darte justamente el control.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 20/04/2011, 12:22
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: setHeader

Gracias, trato y dejo saber si lo logré
__________________
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 23/04/2011, 20:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: setHeader

Estoy verificando los headers y no se muestran. En el plugin he escrito esto
Código PHP:
Ver original
  1. <?php
  2. class Application_Plugin_Headers extends Zend_Controller_Plugin_Abstract
  3. {
  4.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  5.     {
  6.         $response = $this->getResponse();
  7.         echo '<pre>';
  8.         print_r($response->getHeaders());
  9.         echo '</pre>';
  10.     }
  11. }
Y no muestra los headers. Ahora si hago esto
Código PHP:
Ver original
  1. <?php
  2. class Application_Plugin_Headers extends Zend_Controller_Plugin_Abstract
  3. {
  4.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  5.     {
  6.         echo '<pre>';
  7.         print_r(getallheaders());
  8.         echo '</pre>';
  9.     }
  10. }
se muestran los que ya estan declarados. ¿Me falta algo para poder ver los header ya asignados o esos no los muestra Zend?

Esto solo lo hago para aprender a poder entender mejor esta parte.

Edito:
Si hago esto
Código PHP:
Ver original
  1. <?php
  2. class Application_Plugin_Headers extends Zend_Controller_Plugin_Abstract
  3. {
  4.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  5.     {
  6.         $response = $this->getResponse();
  7.         $response->setHeader('Content-Type', 'text/html');
  8.         $this->setResponse($response);
  9.         echo '<pre>';
  10.         print_r($response->getHeaders());
  11.         echo '</pre>';
  12.     }
  13. }
Se muestra solamente el que indiqué, es como si solo mostrara aquellos que son declarados directamente usando setHeader.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 23/04/2011, 20:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: setHeader

¿Otra cosa, como modificar un header desde el .ini?
__________________
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 24/04/2011, 04:20
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: setHeader

mmmmmm, getallheaders te devuelve los headers del Request, para ver los del Response tenes que usar la contraparte apache_response_headers o bien header_list, y claro que te muestra los que seteas, al crear el objeto response, la propiedad headers esta vacía.

Con respecto al .ini, no hay resource para los headers, lo que podes hacer es inyectar via constructor el config con headers(al momento de instanciarlo en el Bootstrap).

Código PHP:
Ver original
  1. class Application_Plugin_Headers extends Zend_Controller_Plugin_Abstract
  2. {
  3.     protected $_options = array();
  4.  
  5.     public function __construct($options)
  6.     {
  7.         if($options instanceof Zend_Config) {
  8.             $options = $options->toArray();
  9.         }
  10.         if(!is_array($options)) {
  11.             throw new InvalidArgumentException('/***/');
  12.         }
  13.         this->setOptions($options);        
  14.     }
  15.    
  16.     public function setOptions(array $options)
  17.     {/***/}
  18.    
  19.     public function routeStartup(Zend_Controller_Request_Abstract $request)
  20.     {/***/}
  21. }

y en el Bootstrap:

Código PHP:
Ver original
  1. $config = new Zend_Config_Ini('/path/to/headers-inifile');
  2. $this->bootstrap('frontController');
  3. $front = $this->getResource('frontController');
  4. $front->registerPlugin(new Application_Plugin_Headers($config));

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 24/04/2011, 08:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: setHeader

Gracias,
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: frameworks-y-php-orientado-a-objetos, setheader
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 12:05.