Zend Framework Configuración por Esquema Module - Seguimento
Seguindo ao meu post anterior sobre a configuración do esquema por módulo base para o Zend Framework , eu teño actualizado o código para esixir menos entón a configuración de antes (non que era necesario máis que algunhas liñas na súa configuración da aplicación!).
De novo facemos uso dun controlador de Auxiliar de Acción Zend invocando o de inicio do seguinte xeito:
/ **
* Configura scripts esquema nun módulo-base por
* /
_initLayoutHelper función protexida ()
{
$ This-> inicio ("frontController ');
$ Esquema = Zend_Controller_Action_HelperBroker: addHelper (
nova Pro_Controller_Action_Helper_SetLayoutPath (APPLICATION_PATH));
}
Case exactamente a mesma de antes só que desta vez pasamos o APPLICATION_PATH constante para o constructor como o noso camiño de base.
A continuación, o auxiliar de acción propio controlador agora é o seguinte:
/ ** * Establece o camiño do esquema nunha base por módulo * * @ Author Lloyd Watkin * @ Since 16/02/2010 * @ Paquete Pro subpackage * @ Controller_Action_Helper * / / ** * Establece o camiño do esquema nunha base por módulo * * @ Author Lloyd Watkin * @ Since 16/02/2010 * @ Paquete Pro subpackage * @ Controller_Action_Helper * / Pro_Controller_Action_Helper_SetLayoutPath clase esténdese Zend_Controller_Action_Helper_Abstract { / ** * Camiño Base * * @ Var cadea * / protected $ _path; / ** * Construír * * @ Paran cadea $ path * / función pública __construct ($ path) { setBasePath $ this-> ($ ruta); } / ** * Establecer camiño de base * * @ Paran cadea $ path * / setBasePath función pública ($ ruta) { if (is_string ($ ruta) |! | empty ($ ruta)) { throw new Exception ('string Con excepción de camiño de base'); } $ This-> _path = $ camiño; } / ** * Obter o camiño de base * * @ Return cadea * / _getBasePath función protexida () { if (is_null ($ this-> _path)) { if (! defined ('APPLICATION_PATH')) { throw new Exception ("camiño da base de datos non pode ser determinada '); } $ This-> _path APPLICATION_PATH =; } retorno _path $ this->; } / ** * Establece o camiño do esquema baseado no módulo * / preDispatch función pública () { $ Module = preg_replace ( '/ ^ [AZ] / i','', $ this-> GetRequest () - getModuleName> () ); if ($ inicio getActionController = $ this-> () -> GetInvokeArg ('inicio')) { $ View = $ GetResource inicio-> ('view'); LayoutPath _getBasePath $ = $ this-> (). "/ Modules / $ {} módulo / esquemas / scripts /"; / * Se o directorio esquema existe despois aplicala lo, se non, acaba de caer * Volta no padrón * / if (is_dir ($ layoutPath)) { getActionController $ this-> () -> GetHelper ('layout') - SetLayoutPath> ($ layoutPath); $ View-> headLink () -> appendStylesheet ( "/ Estilos / {$ módulo} / style.css" ); } } } }
Teña en conta o falecemento do noso camiño de base (cf. APPLICATION_PATH) no constructor, temos tamén un getter e Setter para o camiño de base. A diferenza coa versión precedente do código de que o camiño esquemas non existe, entón o código pode caer cara atrás o camiño patrón de deseño. Se o camiño de base non está definido que ha tratar de determinar o camiño base do APPLICATION_PATH constante, se non, unha excepción é lanzada. Eu tamén descaradamente tirado nunha folla de estilo do módulo-base para unha boa medida
O esquema do módulo de base é determinada a partir de que o camiño do script de esquema existente (obviamente que este método pode ser facilmente cambiado). Iso non engade unha pequena sobrecarga da instalación application.ini (con todo o camiño hai esquema PHP ha almacenar en memoria o resultado para o desempeño *), pero a cambio gañou a comodidade de máis facilmente caer en novos módulos.
É iso aí, non moi diferente, pero non é preciso engadir unha entrada nova configuración cada vez que quere engadir un módulo:)
* Para baleirar a memoria caché (se é necesario) o uso clearstatcache función.


















































Ola, por favor me diga onde crear Pro_Controller_Action_Helper_SetLayoutPath clase con cal nome de arquivo
Son novato no Zend.
grazas
Ola Behrang, crear o auxiliar de acción con calquera nome que queres, eu teño a miña "biblioteca" con espazo propio 'Pro'. Podería facilmente chamar de "SetLayoutPath 'da clase e poñelas onde queira, sempre que o código pode atopo la e extender as clases obrigatorias