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
yiic
do stworzenia podstawowego szkieletu nowego modułu. Na przykład, aby utworzyć powyższy moduł forumforum
moż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
controllers
możemy wciąż używać powyższego formatu trasy. Na przykład, zakładając, że kontrolerPostController
znajduje się wewnątrzforum/controllers/admin
, możemy odnieść się do akcjicreate
uż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.