Zend Framework Per-Module baserade inställningar
Jag har skapat en uppföljning till denna tjänst som kräver mindre konfiguration, se modulbaserat Layout - Zend Framework .
När du använder Zend Framework med moduler, dess uppenbara att om du kör olika (sub-) sajter av samma program som du inte nödvändigtvis vill ha samma layout skript för varje del. Jag bestämde mig för att gå med på följande webbplats struktur:
/ Application / Styrenheter ... / Modeller / Modules / Default / Styrenheter / Layout / Skript / Visningar / Skript / AnotherModule ... / Skript
Problemet var att sätta upp layouten skript på en per-modul basis. Svaret kom genom att använda en handlingsplan Helper. Ställa upp layouter på en per-modul grund innebär tre steg:
- Application.ini (eller liknande konfiguration Setup):
admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouter / script" default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layouter / script" member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / member / layouter / script" affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layouter / script"
- Skapa din Åtgärd Helper:
<? Php / ** * Ställer layouten vägen på en per-modul basis * * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk> * @ Sedan 2010/01/01 * / klass Pro_Controller_Action_Helper_SetLayoutPath sträcker Zend_Controller_Action_Helper_Abstract { / ** * Ställer layout vägen baserade på modul * / public function preDispatch () { $ Modul = $ this-> GetRequest () -> getModuleName (); if ($ bootstrap = $ this-> getActionController () -> GetInvokeArg ('programladdare')) { $ Config = $ bootstrap-> getOptions (); if (isset ($ config [$ module] ['resurser'] ['layout'] ['layoutPath'])) { $ LayoutPath = $ Config [$ module] ['resurser'] ['layout'] ['layoutPath']; $ This-> getActionController () -> GetHelper (layout) -> SetLayoutPath ($ layoutPath); } } } }
- Och till sist boostrap åtgärden helper:
... / ** * Ställer in layout skript på en per-modul basis * / skyddad funktion _initLayoutHelper () { $ This-> bootstrap (frontController '); $ Layouten = Zend_Controller_Action_HelperBroker :: addHelper ( nytt Pro_Controller_Action_Helper_SetLayoutPath ()); } ...

















































