Escenario :
Necesitamos que la aplicacion al cargar, reconozca los modulos que tenga incluido, mas los modulos que puedan tener estos otros modulos.
¿Que debemos hacer?
En el fichero de inicio de la aplicacion (index.php) sustituí
Yii::createWebApplication($config)->run();
por
class VRSTWebApplication extends CWebApplication
{
public function __construct($config=null)
{
parent::__construct($config);
$this->_configurarModulosAplicacion();
}
private function _configurarModulosAplicacion()
{
$modulos=array();
$mods=AyudaModulo::modulosExistentes(realpath(Yii::app()->basePath . DIRECTORY_SEPARATOR . 'modules'));
foreach($mods as $mod) {
$this->setImport(array(
'application.modules.'.$mod.'.models.*',
'application.modules.'.$mod.'.components.*',
));
$this->setModules(array($mod=>array('id'=>$mod)));
$modulo=$this->getModule($mod);
}
}
}
$webApp=new VRSTWebApplication($config);
$webApp->run();
Esto para detectar los modulos que existen dentro de la carpeta protected/modules y configurarselos a la aplicacion.
La linea $modulo=$this->getModule($mod); me sirve para que cada modulo configurado al cargarse tambien "recargue" los modulos que tenga dentro.
Para esto cree una clase que hereda de CWebModule y pongo todos mis modulos a heredar de ella.
Esta clase tiene un metodo que se se encarga de cargar los modulos interiores, este es el codigo:
private function _configurarModulosComponentes()
{
$this->setImport(array(
$this->id.'.models.*',
$this->id.'.components.*',
));
$mods=AyudaModulo::modulosExistentes($this->modulePath);
foreach($mods as $mod) {
$strMod=strtolower($mod);
$this->setImport(array(
$this->id.'.'.$strMod.'.models.*',
$this->id.'.'.$strMod.'.components.*',
));
$this->setModules(array($strMod=>array('id'=>$strMod)));
$modulo=$this->getModule($strMod);
}
}
Como resolver lo del usuario?
En esta misma clase redefinír el metodo:
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
if ((Yii::app()->session['usuarioNombre']=='')||(Yii::app()->session['usuarioClave']==''))
{
$controller->redirect(Yii::app()->homeUrl);
}
if (Yii::app()->user->isGuest)
{
$LoginForm = new LoginForm;
$LoginForm->username = Yii::app()->session['usuarioNombre'];
$LoginForm->password = Yii::app()->session['usuarioClave'];
$LoginForm->login();
}
return true;
}
else
return false;
}
Basicamente lo que se hace es preguntar por dos variables de sesión, usuarioNombre y usuarioClave, si estan vacias redirecciono para homeUrl, si no entonces creo un nuevo modelo LoginForm y hago Login.
0 comentarios:
Publicar un comentario