Zend Framework per modul Layout Settings - Uppföljning
Som en uppföljning till mitt tidigare inlägg om per modul baserad layout inställningar för Zend Framework , har jag uppdaterat koden att kräva mindre konfiguration än tidigare (inte att det krävs mer än några rader i din ansökan konfiguration!).
Återigen använder vi oss av en Zend kontrolleråtgärd Helper åberopa den från bootstrap enligt följande:
/ **
* Ställer upp layouten skript på en per-modul grundval
* /
skyddad funktion _initLayoutHelper ()
{
$ This-> bootstrap (frontController ');
$ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
nya Pro_Controller_Action_Helper_SetLayoutPath (APPLICATION_PATH));
}
Nästan exakt samma som tidigare förutom denna gång vi passerar konstant APPLICATION_PATH i konstruktorn som bas väg.
Nästa regulatorn åtgärden hjälpare själv ser nu ut som följer:
/ ** * Ställer layouten väg på en per-modul grundval * * @ Author Lloyd Watkin * @ Sedan 16/02/2010 * @ Paket Pro * @ Subpackage Controller_Action_Helper * / / ** * Ställer layouten väg på en per-modul grundval * * @ Author Lloyd Watkin * @ Sedan 16/02/2010 * @ Paket Pro * @ Subpackage Controller_Action_Helper * / klass Pro_Controller_Action_Helper_SetLayoutPath sträcker Zend_Controller_Action_Helper_Abstract { / ** * Base väg * * @ Var sträng * / skyddade $ _path; / ** * Konstruera * * @ Param string $ PATH * / offentlig funktion __construct ($ PATH) { $ This-> setBasePath ($ PATH); } / ** * Ställ rotsökvägen * * @ Param string $ PATH * / offentlig funktion setBasePath ($ PATH) { if (is_string ($ PATH) |! | tom ($ PATH)) { kasta nytt undantag ("Undantagna sträng på bas väg '); } $ This-> _path = $ PATH; } / ** * Få rotsökvägen * * @ Return sträng * / skyddad funktion _getBasePath () { if (is_null ($ this-> _path)) { if (! definierade ("APPLICATION_PATH")) { kasta nytt undantag ("Base väg inte kan fastställas '); } $ This-> _path = APPLICATION_PATH; } return $ this-> _path; } / ** * Ställer layout väg bygger på modul * / offentlig funktion preDispatch () { $ Modul = preg_replace ( "/ [^ A-Ö] / i ','', $ this-> getRequest () -> getModuleName () ); if ($ bootstrap = $ this-> getActionController () -> GetInvokeArg ("bootstrap")) { $ View = $ bootstrap-> getResource ("Visa"); $ LayoutPath = $ this-> _getBasePath (). "/ Modules / {$ modul} / layouter / scripts /"; / * Om layout katalogen finns också tillämpa det, annars bara falla * Tillbaka på standard * / if (is_dir ($ layoutPath)) { $ This-> getActionController () -> GetHelper ("layout") -> SetLayoutPath ($ layoutPath); $ Visa-> headLink () -> appendStylesheet ( "/ Styles / {$ modul} / style.css" ); } } } }
Obs tidens vår bas väg (jfr APPLICATION_PATH) i konstruktorn, vi har även en get-och set för basen vägen. Till skillnad från den tidigare versionen av koden om uppställningsformerna sökvägen inte finns, koden kommer att falla tillbaka vägen standardlayout. Om basen vägen inte är inställd kommer den att försöka bestämma underlaget stigen från ständiga APPLICATION_PATH, annars ett undantag kastas. Jag har också fräckt kastat in en modul-baserad formatmall för bra åtgärd
Modulen baserad layout bestäms utifrån huruvida layouten script sökvägen finns (uppenbarligen denna metod kan ändras lätt). Detta lägger till en liten overhead från application.ini setup (men om layouten sökvägen finns PHP kommer cache resultatet för prestanda *) men i gengäld du får den extra bekvämlighet lättare släppa i nya moduler.
That's it, inte mycket annorlunda, men du behöver inte lägga till en ny konfiguration post varje gång du vill lägga till en ny modul:)
* För att klara denna cache (vid behov) använder clearstatcache funktionen.


















































Hej, tala mig var att skapa klass Pro_Controller_Action_Helper_SetLayoutPath som filnamn
Jag är nybörjare i Zend.
tack
Hej Behrang skapar åtgärden hjälpare med vilket namn du vill, jag har mina egna "bibliotek" med namespace "Pro". Du kan lika gärna kalla klassen "SetLayoutPath" och placera den vart du vill, förutsatt att koden kan hitta det och du förlänga den nödvändiga klasser