En nuestra estructura modular se han diseñado 3 módulos, default, admin y bibloteca, para facilitar el cambio del layout se ha creado un Front Controller Plugin.
Que es un Front Controller Plugin
Es un clase que extiende de Zend_Controller_Plugin_Abstract que permite mejorar el comportamiento y la versatilidad de nuestra aplicación, ahorrando muchas lineas de código a través de los controllers. El Front Controller Plugin permite interceptar a través de seis eventos o hooks y ejecutar ciertas acciones que nos facilitaran el trabajo.
- routeStartup () : antes de la solicitud de enrutamiento
- routeShutdown () : después de la solicitud de enrutamiento
- dispatchLoopStartup () : antes de entrar en el bucle de envío
- preDispatch () : antes de despachar una acción individual
- postDispatch () : tras el envío de una acción individual
- dispatchLoopShutdown () : después de completar el bucle de envío
Registro de plugins application.ini
;Registrar Plugins
autoloaderNamespaces[] = "Plugins_"
resources.frontController.plugins.Layouts = "Plugins_Layouts"
Indica que en el directorio de library se creará una carpeta Plugins y que la clase se llamará Layouts.php. Con la linea resource.frontController.plugins, registramos y activamos el plugin, aunque tambien lo podemos hacer en el Bootstrap
Crear la clase Layouts
class Plugins_Layouts extends Zend_Controller_Plugin_Abstract {
private $_nombreModulo;
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->_nombreModulo = $request->getModuleName();
$layout = Zend_Layout::getMvcInstance();
switch ($this->_nombreModulo)
{
case 'admin':
$layout->setLayout('admin');
break;
case 'biblioteca':
$layout->setLayout('biblioteca');
break;
default:
$layout->setLayout('default');
break;
}
}
}
La clase será utilizada en el evento preDispatch
Activar de plugin en Bootstrap
protected function _initRegisterPlugins()
{
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugins_Layouts());
}
Con esta funcionalidad al cambiar de modulo, automáticamente se cambiará el layout de la aplicación. Adicional a éste podríamos organizarlo para detectar el perfil del usuario y mostrar un layout especifico.
Una consulta como podria crear un layout diferente para cada modulo, con zend framework 2, por ejemplo tengo 2 modulos front y back ya termine el front su layout y contenido pero cuando agrego otro modulo mi front coje el ultimo layout de todos y no quiero eso quiero uno independiente para cada modulo.
ResponderEliminarHola me aparece l siguiente erro:
ResponderEliminarFatal error: Class 'Plugins_Layouts' not found in /var/www/my/application/Bootstrap.php on line 9
Gracias espero puedas decirme a que se deve