zend-framework - ventajas - zend framework vs laravel
¿Cómo cargar automáticamente los modelos del módulo Zend Framework? (1)
Estoy construyendo un nuevo CMS en Zend Framework y no tengo mucha exposición a ZF. El cliente requiere dos secciones llamadas Admin y FE. Entonces, he estructurado la estructura de mi aplicación de la siguiente manera.
- SITE -- application ---- configs ---- layouts ---- modules -------- default ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php -------- admin ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php ---- Bootstrap.php -- public -- library -- index.php
Mi estructura funciona bien y los diseños y controladores se cargan cuando accedo al sitio como http: // site o http: // site / admin .
Mi pregunta es 1.) ¿Cómo puedo autocargar mis modelos en módulos? En el archivo de arranque específico del modelo, he agregado el código siguiente. Pero no está funcionando.
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
''basePath'' => APPLICATION_PATH.''/modules/admin/'',
''namespace'' => '''',
''resourceTypes'' => array(
''form'' => array(
''path'' => ''forms/'',
''namespace'' => ''Form_'',
),
''model'' => array(
''path'' => ''models/'',
''namespace'' => ''CPModel_''
)
),
));
return $autoloader;
}
}
2.) ¿Cómo usaré diferentes diseños para diferentes módulos?
Dos preguntas aquí:
- Modelos autocargables
- Diseño específico del módulo
Para los modelos de carga automática, primero asegúrese de que la clase de arranque del módulo amplíe Zend_Application_Module_Bootstrap
. Esto registrará un autocargador de recursos que incluye una asignación para que una clase modelo llamada Admin_Model_User
pueda almacenarse en el archivo application/modules/admin/models/User.php
(tenga en cuenta el modelo plural * s * en el nombre de ruta). Para el uso que describes arriba, no parece que necesites definir alguna de estas asignaciones.
Hay un poco de engaño asociado al módulo predeterminado. IIRC, el módulo predeterminado usa el espacio de nombre de aplicación, normalmente predeterminado en Application_
. Por lo tanto, por ejemplo, un modelo de usuario en el módulo predeterminado se denominaría Application_Model_User
y se almacenaría en el archivo application/modules/default/models/User.php
. [Si eso no funciona, intente nombrar Default_Model_User
]
[Sin embargo, si realmente insistes en un espacio de nombre de aplicación vacío para tu módulo de administración y un prefijo de CPModel para tus modelos, como sugiere tu ejemplo, entonces algo de esto cambia].
El resultado es que, dado que la mayoría de estas carpetas no están en el include_path, el sistema necesita saber en algún momento qué clase de prefijos asociar / asignar con qué directorios.
Para diseños específicos de módulo, generalmente creo un complemento de controlador frontal que implementa el gancho preDispatch()
. Si mantiene sus diseños en el nivel superior en la application/layouts/scripts/
, su plugin puede parecerse a lo siguiente almacenado en application/plugins/Layout.php
:
class Application_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
Zend_Layout::getMvcInstance()->setLayout($request->getModuleName());
}
}
Registre su complemento en su Bootstrap
nivel de aplicación, ya sea a través de applications/config/application.ini
:
resources.frontController.plugin.layout = "Application_Plugin_Layout"
o en Bootstrap
nivel de application/Bootstrap.php
en la application/Bootstrap.php
:
protected function _initPlugins()
{
$this->bootstrap(''frontController'');
$front = $this->getResource(''frontController'');
$front->registerPlugin(new Application_Plugin_Layout());
}
Entonces, por ejemplo, su diseño de administrador podría almacenarse en application/layouts/scripts/admin.phtml
.