Zend Framework per-module op basis van instellingen

Door Steven Lloyd Watkin , vrijdag 1 januari 2010 22:40

Ik heb followup creëerde een naar dit bericht welke configuratie vereist minder, zie module gebaseerd Layout - Zend Framework .

Bij gebruik van de Zend Framework met modules, het is duidelijk dat als je verschillende lopende (sub-) sites uit dezelfde toepassing die u niet per se willen dezelfde lay-out scripts voor elk onderdeel. Ik besloot om te gaan met de volgende structuur van de site:

  / Toepassing
     / Controllers
         ...
     / Modellen
     / Modules
         / Default
             / Controllers
             / Lay-out
                 / Scripts
             / Bekeken
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Het probleem was het opzetten van de lay-out scripts op een per-module basis. Het antwoord kwam door middel van een Action Helper. Het opzetten van de lay-outs op een per-module basis bestaat uit drie stappen:

  1. Application.ini (of soortgelijke configuratie setup):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouts / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layouts / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / member / layouts / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / affiliate / layouts / scripts" 
  2. Maak uw Action Helper:
      <? Php
     / **
      * Stelt de lay-out pad op een per-module basis
      *
      * @ Author Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Sinds 2010-01-01
      * /
     klasse Pro_Controller_Action_Helper_SetLayoutPath
         breidt Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Stelt layout pad, gebaseerd op module
          * /
         publieke functie preDispatch ()
         {
        	 Module = $ $ this-> getRequest () -> getModuleName ();
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg ('bootstrap')) {
    
    	         $ Config = $ bootstrap-> getOptions ();
    
    	         if (isset ($ config [$ module] ['resources'] ['layout'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ module] ['resources'] ['layout'] ['layoutPath'];
    	             $ This-> getActionController ()
    	                  -> GetHelper ('layout')
    	                  -> SetLayoutPath ($ layoutPath);
    	         }
        	 }
         }
     } 
  3. En ten slotte bootstrap de actie helper:
      ...
         / **
          * Stelt layout scripts op een per-module basis
          * /
         beveiligde functie _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap ('frontController');
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         nieuwe Pro_Controller_Action_Helper_SetLayoutPath ());
    	 }
     ... 

4 Responses to "Zend Framework per-module op basis van de instellingen"

  1. Behrang zegt:

    Hi eerste bedankt voor je handige tutorial, maar waar ik actie helper met heks bestandsnaam te creëren vertellen?
    Behrang

  2. Hallo Behrang, maakt de actie helper Welke naam je wilt, ik mijn eigen 'bibliotheek' met naamruimte 'Pro' te hebben. Je kon net zo goed bellen met de klasse 'SetLayoutPath' en zet het waar je maar wilt, op voorwaarde dat de code kan vinden en verlengt u de vereiste klassen

  3. Shashi kanth zegt:

    Hoi, iam verward met het opzetten van specifieke module database-instellingen ... Heeft iemand een idee?

  4. Ik denk dat dit gemakkelijk zou kunnen worden bereikt het specificeren van de bovenstaande patroon. Ten eerste, maak opties in uw ini-bestand aan de bestanden van:

    moduleName.db.user = "
    moduleName.db.password = "
    moduleName2.db.user = "
    ... Etc ...

    Dan gewoon het genereren van uw database verbinding als het je past (Zend_Db:: factory () of iets dergelijks) en stash het weg in het register of instellen als de standaard adapter bij gebruik van Zend_Db_Table (Zend_Db_Table:: setDefaultAdapter ()).

Laat een reactie achter













Panorama Thema door Themocracy

6 bezoekers nu online
4 gasten, 2 bots, 0 leden
Max bezoekers vandaag: 14 om 07:34 am UTC
Deze maand: 26 op 07-05-2011 0:35 UTC
Dit jaar: 130 bij 28-03-2011 22:40 UTC
Alle tijd: 130 op 28-03-2011 22:40 UTC