Moduł jest samowystarczalną jednostką aplikacji, która zawiera modele, widoki, kontrolery oraz inne wspierają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 katalogu, którego nazwa służy jako jego unikalne ID.
Struktura katalogów modułu jest podobna do tej z
katalogu 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 katalogowi 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: Aby utworzyć podstawowy szkielet nowego modułu możemy używać generatora modułów zawartego w Gii.
Aby używać modułu, najpierw umieść moduł w katalogu modules
w
katalogu 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żywamy 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
.
Liczba zagnieżdzeń modułów jest nieograniczona. Oznacza to, że jeden moduł może posiadać inne moduły,
które mogą posiadać kolejne moduły. Pierwszego nazywamy modułem rodzica a drugiego modułem dziecka. Moduły dzieci muszą zostać zadeklarowane we właściwościach modules swego rodzica,
w taki sam sposób jak moduły w konfiguracji aplikacji z wcześniejszych przykładów.
Aby uzyskać dostęp do akcji modułu dziecka, powinniśmy skorzystać z trasy
IDModułuRodzica/IDModułuDziecka/IDKontrolera/IDAkcji
.
Found a typo or you think this page needs improvement?
Edit it on github !
Wymagana deklaracja wartości początkowych!
Aby przykład z używaniem wartości początkowych (zob. "2. Używanie modułów") działał, konieczne jest, aby ustawiana w podany sposób właściwości była zadeklarowana w głównym pliku modułu!
Na przykład. Jeśli tworzony jest moduł forum i ustawiana jego właściwość postPerPage (jak w przykładzie), konieczna jest edycja pliku protected/modules/forum/ForumModule.php i dodanie na jego początku następującego kodu:
class UserModule extends CWebModule { public $postPerPage = 20; ... }
gdzie 20 to domyślna wartość tej właściwości, na wypadek, gdyby użytkownik nie określił własnej w konfiguracji aplikacji używającej tworzonego modułu.
Bez tej deklaracji zostanie wyświetlony błąd 500 mówiący o tym, że właściwość ForumModule.postPerPage jest niezdefiniowana.
Signup or Login in order to comment.