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

[Zend] Cambiar Script Desde Controlador

Estas en el tema de [Zend] Cambiar Script Desde Controlador en el foro de Zend en Foros del Web. Hola, necesito saber como puedo cambiar Script desde un controlador, le pongo un ejemplo: URL: midominio.com/usuario/index En el controlador verifico si el usuario está logueado ...
  #1 (permalink)  
Antiguo 26/03/2011, 19:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
[Zend] Cambiar Script Desde Controlador

Hola, necesito saber como puedo cambiar Script desde un controlador, le pongo un ejemplo:
URL: midominio.com/usuario/index
En el controlador verifico si el usuario está logueado para que levante el script correspondiente que sería index.phtml, de lo contrario quisiera que levante otro script como por ejemplo login.phtml
Quisiera saber si se puede hacer esto sin ejecutar el helper _redirect.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #2 (permalink)  
Antiguo 26/03/2011, 19:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: [Zend] Cambiar Script Desde Controlador

Puedes crear un plugin y en el bootstrap verificas. Ejemplo
Código PHP:
Ver original
  1. // /application/plugins/AccessCheck.php
  2. <?php
  3. class Application_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract
  4. {
  5.     private $_auth = null;
  6.  
  7.     public function __construct(Zend_Auth $auth)
  8.     {
  9.         $this->_auth = $auth;
  10.     }
  11.  
  12.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  13.     {
  14.         if(!$this->_auth->hasIdentity()){
  15.             //Donde desees que se loguee
  16.             $request->setControllerName('index');
  17.             $request->setActionName('index');
  18.         }
  19.     }
  20. }

Código PHP:
Ver original
  1. // /application/Bootstrap.php
  2. <?php
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     public function _initAutoload()
  6.     {
  7.         $fc = Zend_Controller_Front::getInstance();
  8.         $fc->registerPlugin(new Application_Plugin_AccessCheck(Zend_Auth::getInstance()));
  9.     }
  10. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 26/03/2011, 22:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: [Zend] Cambiar Script Desde Controlador

La respuesta de abimaelrc es la correcta para lo que necesitas, sin embargo si quieres hacer render de otro script desde tu controller basta con que hagas un $this->render('script');
  #4 (permalink)  
Antiguo 27/03/2011, 13:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por GatorV Ver Mensaje
La respuesta de abimaelrc es la correcta para lo que necesitas, sin embargo si quieres hacer render de otro script desde tu controller basta con que hagas un $this->render('script');
Excelente esto es lo que quería.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #5 (permalink)  
Antiguo 27/03/2011, 13:07
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por abimaelrc Ver Mensaje
Puedes crear un plugin y en el bootstrap verificas. Ejemplo
Código PHP:
Ver original
  1. // /application/plugins/AccessCheck.php
  2. <?php
  3. class Application_Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract
  4. {
  5.     private $_auth = null;
  6.  
  7.     public function __construct(Zend_Auth $auth)
  8.     {
  9.         $this->_auth = $auth;
  10.     }
  11.  
  12.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  13.     {
  14.         if(!$this->_auth->hasIdentity()){
  15.             //Donde desees que se loguee
  16.             $request->setControllerName('index');
  17.             $request->setActionName('index');
  18.         }
  19.     }
  20. }

Código PHP:
Ver original
  1. // /application/Bootstrap.php
  2. <?php
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     public function _initAutoload()
  6.     {
  7.         $fc = Zend_Controller_Front::getInstance();
  8.         $fc->registerPlugin(new Application_Plugin_AccessCheck(Zend_Auth::getInstance()));
  9.     }
  10. }
No me sirve de mucho porque tengo que comprobar en muchos controladores si el usuario esta logueado.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #6 (permalink)  
Antiguo 27/03/2011, 13:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: [Zend] Cambiar Script Desde Controlador

Pero, si eso se hace en un solo lugar , no hay que ingresar eso en un controlador...
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 27/03/2011, 15:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por abimaelrc Ver Mensaje
Pero, si eso se hace en un solo lugar , no hay que ingresar eso en un controlador...
Te explico, no en todas las acciones requiero comprobar si está logueado, entonces solo en algunas acciones debo comprobar si esta logueado a o no, lo que vos me propusiste chequea si está logueado en cada petición y no en algunas que es lo que necesito.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #8 (permalink)  
Antiguo 27/03/2011, 15:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Desacuerdo Respuesta: [Zend] Cambiar Script Desde Controlador

Que tal CyberMauher,

Podrias utilizar lo que te propone abimaelrc y agregarle un black list, algo así:

Código PHP:
Ver original
  1. class Application_Plugin_AccessCheck
  2.     extends Zend_Controller_Plugin_Abstract
  3. {
  4.     ...
  5.     private $_blackList = array(
  6.         'default:index:index',
  7.         'users:index:list'
  8.     );
  9.     ...
  10.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  11.     {    
  12.         $resource = $request->getModuleName()     . ':'
  13.                   . $request->getControllerName() . ':'
  14.                   . $request->getActionName();
  15.  
  16.         if(in_array($resource, $this->_blackList) && !$this->_auth->hasIdentity()){
  17.             //Donde desees que se loguee
  18.             $request->setControllerName('index');
  19.             $request->setActionName('index');
  20.         }
  21.     }
  22. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 27/03/2011, 18:22
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal CyberMauher,

Podrias utilizar lo que te propone abimaelrc y agregarle un black list, algo así:

Código PHP:
Ver original
  1. class Application_Plugin_AccessCheck
  2.     extends Zend_Controller_Plugin_Abstract
  3. {
  4.     ...
  5.     private $_blackList = array(
  6.         'default:index:index',
  7.         'users:index:list'
  8.     );
  9.     ...
  10.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  11.     {    
  12.         $resource = $request->getModuleName()     . ':'
  13.                   . $request->getControllerName() . ':'
  14.                   . $request->getActionName();
  15.  
  16.         if(in_array($resource, $this->_blackList) && !$this->_auth->hasIdentity()){
  17.             //Donde desees que se loguee
  18.             $request->setControllerName('index');
  19.             $request->setActionName('index');
  20.         }
  21.     }
  22. }

Saludos.
Esta opción la habia pensado y la descarté, pero bueno ya que me lo dice mi dios lo voy a implementar.
Va no se, tirenme una ventaja de hacer esto asi me termino de convencer.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #10 (permalink)  
Antiguo 27/03/2011, 18:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [Zend] Cambiar Script Desde Controlador

En el ejemplo esta hardcodeado, pero perfectamente lo podrias tener en el config y pasarlo por el constructor, luego para agregar o quitar seria simplemente editar el .ini

Application_Plugin_AccessCheck

Código PHP:
Ver original
  1. class Application_Plugin_AccessCheck
  2.     extends Zend_Controller_Plugin_Abstract
  3. {
  4.     ...
  5.     private $_blackList;
  6.  
  7.     public function __construct(Zend_Auth $auth, array $blackList)
  8.     {
  9.        $this->_blackList = $blackList;
  10.       ...
  11.     }
  12. }


Bootstrap
Código PHP:
Ver original
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3.     public function _initPlugins()
  4.     {
  5.         $options = $this->getOptions();
  6.         $fc = Zend_Controller_Front::getInstance();        
  7.         $fc->registerPlugin(new Application_Plugin_AccessCheck(Zend_Auth::getInstance()), $options['blackList']);
  8.     }
  9. }

application.ini
Código INI:
Ver original
  1. ...
  2. blackList[] = "default:index:index"
  3. blackList[] = "users:index:list"

Creo que es preferible algo asi, a a estar en los diferentes action's comprobando para mostrar una vista u otra, tenes que pensar que en otro proyecto se te puede presentar la misma situación y para solventarlo seria tan simple como integrar el plugin, AccessCheck es candidato a estar en tu libreria .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 27/03/2011, 19:25
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por masterpuppet Ver Mensaje
En el ejemplo esta hardcodeado, pero perfectamente lo podrias tener en el config y pasarlo por el constructor, luego para agregar o quitar seria simplemente editar el .ini

Application_Plugin_AccessCheck

Código PHP:
Ver original
  1. class Application_Plugin_AccessCheck
  2.     extends Zend_Controller_Plugin_Abstract
  3. {
  4.     ...
  5.     private $_blackList;
  6.  
  7.     public function __construct(Zend_Auth $auth, array $blackList)
  8.     {
  9.        $this->_blackList = $blackList;
  10.       ...
  11.     }
  12. }


Bootstrap
Código PHP:
Ver original
  1. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3.     public function _initPlugins()
  4.     {
  5.         $options = $this->getOptions();
  6.         $fc = Zend_Controller_Front::getInstance();        
  7.         $fc->registerPlugin(new Application_Plugin_AccessCheck(Zend_Auth::getInstance()), $options['blackList']);
  8.     }
  9. }

application.ini
Código INI:
Ver original
  1. ...
  2. blackList[] = "default:index:index"
  3. blackList[] = "users:index:list"

Creo que es preferible algo asi, a a estar en los diferentes action's comprobando para mostrar una vista u otra, tenes que pensar que en otro proyecto se te puede presentar la misma situación y para solventarlo seria tan simple como integrar el plugin, AccessCheck es candidato a estar en tu libreria .

Saludos.
Aaaah! esto si ya tiene más color y sobre todo me gusto esto "AccessCheck es candidato a estar en tu libreria".
Es al pedo dios es dios, GRACIAS A TODOS!

Me gustaría que me aclaren que significa el guión bajo que anteponen en las variables.
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!
  #12 (permalink)  
Antiguo 27/03/2011, 19:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: [Zend] Cambiar Script Desde Controlador

Es una sugerencia que da Zend para cuando se coloca privado o protegido una propiedad o método, cuando es pública se coloca con una letra en minúscula. Es una forma de estandarizar el código. Te recomiendo una lectura a este material http://framework.zend.com/manual/en/....overview.html y sus siguientes páginas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 27/03/2011, 19:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 183
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: [Zend] Cambiar Script Desde Controlador

Cita:
Iniciado por abimaelrc Ver Mensaje
Es una sugerencia que da Zend para cuando se coloca privado o protegido una propiedad o método, cuando es pública se coloca con una letra en minúscula. Es una forma de estandarizar el código. Te recomiendo una lectura a este material http://framework.zend.com/manual/en/....overview.html y sus siguientes páginas.
Gracias, muchas gracias!
__________________
Le estaré agradecido por los siglos de los siglos a mi dios en PHP masterpuppet. Amen!

Etiquetas: controlador, frameworks-y-php-orientado-a-objetos
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 01:55.