Wprowadzenie do Zend Framework

     Nauka Zend Framework

    appendix

     Przewodnik po Zend Framework


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 21.3% Update 2011-11-16 - Revision 24356 - Version ZF 1.11.x

    22.11. Użycie konwencjonalnej modularnej struktury katalogów

    22.11.1. Wprowadzenie

    Konwencjonalna modularna struktura katalogów pozwala ci na oddzielenie różnych aplikacji MVC w osobne jednostki i użycie ich z różnymi kontrolerami frontowymi. Przykładem może być taka struktura katalogów:

    docroot/
        
    index.php
    application
    /
        default/
            
    controllers/
                
    IndexController.php
                FooController
    .php
                models
    /
                
    views/
                    
    scripts/
                        
    index/
                        
    foo/
                    
    helpers/
                    
    filters/
        
    blog/
            
    controllers/
                
    IndexController.php
            models
    /
            
    views/
                
    scripts/
                    
    index/
                
    helpers/
                
    filters/
        
    news/
            
    controllers/
                
    IndexController.php
                ListController
    .php
            models
    /
            
    views/
                
    scripts/
                    
    index/
                    list/
                
    helpers/
                
    filters/

    W tym modelu, nazwa modułu uwidacznia się jako przedrostek nazw kontrolerów, ktore zawiera moduł. Powyższy przykład zawiera trzy kontrolery modułów, 'Blog_IndexController', 'News_IndexController', oraz 'News_ListController'. Dwa globalne kontrolery, 'IndexController' oraz 'FooController' są także zdefiniowane; żaden z nich nie posiada własnej przestrzeni nazw. Ta struktura katalogów będzie używana w przykładach w tym rozdziale.

    [Notatka] Brak przestrzeni nazw w domyślnym module

    Zauważ, że w domyślnym module nazwa kontrolera nie ma przedrostka defniującego przestrzeń nazw. Dlatego w powyższym przykładzie kontrolery w domyślnym module nie potrzebują przedrostka 'Default_' -- są one po prostu uruchamiane jako 'IndexController' oraz 'FooController'. Przedrostek definiujący przestrzeń nazw jest jednak używany we wszystkich innych modułach.

    Więc jak implementujesz taką strukturę katalogów używając komponentów MVC Zend Framework?

    22.11.2. Określanie ścieżek kontrolera modułów

    Pierwszym krokiem użycia modułów jest zmodyfikowanie sposobu określania listy ścieżek do kontrolerów w kontrolerze frontowym. W podstawowej wersji MVC, przekazujesz tablicę lub łańcuch znaków do metody setControllerDirectory(), lub ścieżkę do metody addControllerDirectory(). Gdy używasz modułów, musisz także odpowiednio zmienić wywołania tych metod.

    W metodzie setControllerDirectory(), musisz przekazać tablicę asocjacyjną i określić pary klucz/wartość w postaci moduł/ścieżka. Specjalny klucz default będzie użyty dla globalnych kontrolerów (tych, które nie potrzebują przestrzeni nazw). Wszystkie wpisy powinny zawierać łańcuch znaków wskazujący na pojedynczą ścieżkę, a klucz default musi istnieć. Na przykład:

    $front->setControllerDirectory(array(
          
    'default' => '/path/to/application/controllers',
          
    'blog'    => '/path/to/application/blog/controllers'
    ));

    Metoda addControllerDirectory() przyjmuje opcjonalny drugi argument. Gdy używasz modułów, przekaż nazwę modułu jak drugi argument; jeśli nie określisz drugiego argumentu, ścieżka zostanie dodana dla domyślnej przestrzeni nazw. Na przykład:

    $front->addControllerDirectory('/path/to/application/news/controllers''news');

    Zostawiając najlepsze na koniec, najprostszym sposobem określenia katalogu modułów jest określenie ich wszystkich na raz, gdy wszystkie moduły znajdują się w jednym katalogu i posiadają taką samą strukturę. Można to zrobić za pomocą metody addModuleDirectory():

    /**
     * Zakładając, że tak wygląda struktura katalogów:
     * application/
     *     modules/
     *         default/
     *             controllers/
     *         foo/
     *             controllers/
     *         bar/
     *             controllers/
     */
    $front->addModuleDirectory('/path/to/application/modules');

    Powyższy przykład definiuje moduły default, foo, oraz bar, każdy wskazujący na podkatalog controllers danego modułu.

    Możesz określić nazwę podkatalogu kontrolerów używaną w modułach za pomocą metody setModuleControllerDirectoryName():

    /**
     * Zmieniamy nazwę podkatalogu kontrolerów na 'con'
     * application/
     *     modules/
     *         default/
     *             con/
     *         foo/
     *             con/
     *         bar/
     *             con/
     */
    $front->setModuleControllerDirectoryName('con');
    $front->addModuleDirectory('/path/to/application/modules');
    [Notatka] Notatka

    Możesz określić aby podkatalog kontrolerów nie był używany w modułach, przekazując pustą wartość do metody setModuleControllerDirectoryName().

    22.11.3. Dopasowanie tras do modułów

    Domyślna trasa w Zend_Controller_Router_Rewrite jest obiektem typu Zend_Controller_Router_Route_Module. Ta trasa obsługuje takie schematy routingu:

    • :module/:controller/:action/*

    • :controller/:action/*

    Innymi słowy, dopasuje ona tylko kontroler oraz akcję, lub wraz z poprzedzającym je modułem. Zasady dopasowania określają, że moduł będzie dopasowany tylko wtedy, gdy klucz o takiej samej nazwie istnieje w tablicy ze ścieżkami kontrolerów przekazanej do kontrolera frontowego i obiektu uruchamiającego.

    22.11.4. Moduł lub globalny domyślny kontroler

    W domyślnym routerze jeśli w URL nie został określony kontroler, użyty zostanie domyślny kontroler (IndexController, jeśli nie określono inaczej). Gdy używamy kontrolerów modularnych, jeśli moduł został określony, ale kontroler nie, obiekt uruchamiający wpierw będzie szukał domyślnego kontrolera w ścieżce modułu, a w drugiej kolejności będzie szukał w ścieżce dla domyślnej globalnej przestrzeni nazw 'default'.

    Jeśli chcesz zawsze używać domyślnej przestrzeni nazw, ustaw parametr useDefaultControllerAlways w kontrolerze frontowym:

    $front->setParam('useDefaultControllerAlways'true);
    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...