Uwaga: Wsparcie dla modułów zostało dodane od wersji 1.0.3.
Moduł jest samowystarczalną jednostką aplikacji, która zawiera modele, widoki, kontrolery oraz inne wpierające komponenty. W wielu aspektach, moduły przypominają aplikację. Główna różnica jest taka, że moduł nie może istnieć sam i musi rezydować w aplikacji. Użytkownicy posiadają dostęp do kontrolerów w modułach w ten sam sposób jak w kontrolerze aplikacji.
Moduły są użyteczne w kilku scenariuszach. Dla dużych aplikacji, możemy ją podzielić na kilka modułów, każdy z nich może być pisany oraz zarządzany osobno. Część wspólnie używanych funkcjonalności, takich jak zarządzanie użytkownikami, zarządzanie komentarzami, mogą być opracowywane w postaci modułów, które można łatwo ponownie wykorzystać w przyszłych projektach.
Moduł jest zorganizowany w folderze, którego nazwa służy jako jego unikalne ID.
Struktura folderu modułu jest podobna do tej z
folderu głównego aplikacji.
Poniżej pokażemy typową strukturę modułu nazwanego forum:
forum/
ForumModule.php klasa modułu
components/ posiada komponenty użytkownika do ponownego użycia
views/ zawiera pliki widoków dla widżetów
controllers/ zawiera pliki klas kontrolerów
DefaultController.php plik domyślnego kontrolera klasy
extensions/ zawiera zewnętrzne rozszerzenia
models/ zawiera pliki modeli klas
views/ zawiera pliki widoku kontrolera oraz układów
layouts/ zawiera pliki układów widoku
default/ zawiera plik widoku dla DefaultController (domyślnego kontrolera)
index.php plik widoku index
Moduł musi posiadać klasę modułu, która dziedziczy z CWebModule. Nazwa klasy zależy
od wyniku wyrażenia ucfirst($id).'Module', gdzie $id odpowiada ID modułu
(lub folderowi modułu). Klasa modułu służy jako główne miejsce dla przechowywania
informacji współdzielonych wewnątrz kodu modułu. Na przykład, możemy użyć CWebModule::params
do przechowywania parametrów modułu oraz CWebModule::components do dzielenia
komponentów aplikacji na poziomie
modułu.
Wskazówka: Możemy użyć narzędzia
yiicdo stworzenia podstawowego szkieletu nowego modułu. Na przykład, aby utworzyć powyższy moduł forumforummożemy wykonać następujące polecenie w oknie linie poleceń:% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> module forum
Aby używać modułu, najpierw umieść moduł w katalogu modules w
folderze głównym aplikacji.
Następnie zadeklaruj ID modułu we właściwości modules aplikacji.
Na przykład, w celu używania powyższego modułu forum, możemy używać następującej
konfiguracji aplikacji:
return array(
......
'modules'=>array('forum',...),
......
);Moduł może również zostać skonfigurowany poprzez wartości inicjalne właściwości.
Sposób użycia jest bardzo podobny do tego z konfiguracji
komponentów aplikacji.
Na przykład, moduł forum może mieć właściwość nazwaną postPerPage (ilość postów na stronę)
w swojej klasie, która może zostać skonfigurowana w [konfiguracji aplikacji(/doc/guide/basics.application#application-configuration)
następująco:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);Dostęp do instancji modułu można uzyskać poprzez właściwość module
aktualnie aktywnego kontrolera. Poprzez instancję modułu, możemy uzyskać dostęp do
informacji dzielonych na poziomie modułu. Na przykład, w celu uzyskania dostępu
do powyższej informacji o ilości postów na stronę postPerPage, możemy użyć
następującego wyrażenia:
$postPerPage=Yii::app()->controller->module->postPerPage;
// lub następująco jeśli $this oznacza instancję kontrolera
// $postPerPage=$this->module->postPerPage;Dostęp do akcji kontrolera w module można uzyskać poprzez trasę
IDmodułu/IDkontrolera/IDakcji. Na przykład, zakładając, że powyższy moduł forum
posiada kontroler nazwany PostController, używany trasy
forum/post/create aby odnieść się do akcji create w tym kontrolerze.
Odpowiadający tej trasie adres URL będzie następujący http://www.example.com/index.php?r=forum/post/create.
Wskazówka: Jeśli kontroler jest podkatalogiem katalogu
controllersmożemy wciąż używać powyższego formatu trasy. Na przykład, zakładając, że kontrolerPostControllerznajduje się wewnątrzforum/controllers/admin, możemy odnieść się do akcjicreateużywającforum/admin/post/create.
Moduły mogą być zagnieżdżone. Oznacza to, że jeden moduł może posiadać inne moduły.
Pierwszego nazywamy modułem rodzica a drugiego modułem dziecka. Moduły dzieci
muszą znajdować się w katalogu modules moduły rodzica. Aby uzyskać dostęp do
akcji kontrolera w module dziecka, powinniśmy używać trasy IDModułuRodzica/IDModułuDziecka/IDKontrolera/IDAkcji.
Signup or Login in order to comment.