Zend Framework per modul Layout Settings - Uppföljning

Genom Steven Lloyd Watkin , tisdag 16 februari, 2010 20:48

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.

2 Svaren till "Zend Framework per modul Layout Settings - Uppföljning"

  1. Behrang säger:

    Hej, tala mig var att skapa klass Pro_Controller_Action_Helper_SetLayoutPath som filnamn
    Jag är nybörjare i Zend.
    tack

  2. 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

Lämna ett svar













Panorama Tema av Themocracy

6 besökare online just nu
5 gäster, 1 bots, 0 medlemmar
Max besökare idag: 14 på 03:51 UTC
Denna månad: 26 kl 2011/07/05 12:35 UTC
I år: 130 på 28-03-2011 22:40 UTC
Alla tid: 130 på 28-03-2011 10:40 UTC