mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-04 07:14:06 +01:00
128 lines
6.0 KiB
Plaintext
128 lines
6.0 KiB
Plaintext
Moduł
|
|
======
|
|
|
|
> Note|Uwaga: Wsparcie dla modułów zostało dodane od wersji 1.0.3.
|
|
|
|
Moduł jest samowystarczalną jednostką aplikacji, która zawiera [modele](/doc/guide/basics.model),
|
|
[widoki](/doc/guide/basics.view), [kontrolery](/doc/guide/basics.controller) oraz inne
|
|
wpierające komponenty. W wielu aspektach, moduły przypominają [aplikację](/doc/guide/basics.application).
|
|
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.
|
|
|
|
Tworzenie modułu
|
|
---------------
|
|
|
|
Moduł jest zorganizowany w folderze, którego nazwa służy jako jego unikalne [ID|CWebModule::id].
|
|
Struktura folderu modułu jest podobna do tej z
|
|
[folderu głównego aplikacji](/doc/guide/basics.application#application-base-directory).
|
|
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](/doc/guide/basics.application#application-component) na poziomie
|
|
modułu.
|
|
|
|
> Tip: We can use the module generator in Gii to create the basic skeleton of a new module.
|
|
|
|
> Tip|Wskazówka: Możemy używać generatora modułów zawartego w Gii aby utworzyć podstawowy szkielet nowego modułu.
|
|
|
|
|
|
Używanie modułów
|
|
------------
|
|
|
|
Aby używać modułu, najpierw umieść moduł w katalogu `modules` w
|
|
[folderze głównym aplikacji](/doc/guide/basics.application#application-base-directory).
|
|
Następnie zadeklaruj ID modułu we właściwości [modules|CWebApplication::modules] aplikacji.
|
|
Na przykład, w celu używania powyższego modułu `forum`, możemy używać następującej
|
|
[konfiguracji aplikacji](/doc/guide/basics.application#application-configuration):
|
|
|
|
~~~
|
|
[php]
|
|
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](/doc/guide/basics.application#application-component).
|
|
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:
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
......
|
|
'modules'=>array(
|
|
'forum'=>array(
|
|
'postPerPage'=>20,
|
|
),
|
|
),
|
|
......
|
|
);
|
|
~~~
|
|
|
|
Dostęp do instancji modułu można uzyskać poprzez właściwość [module|CController::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:
|
|
|
|
~~~
|
|
[php]
|
|
$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ę](/doc/guide/basics.controller#route)
|
|
`IDmodułu/IDkontrolera/IDakcji`. Na przykład, zakładając, że powyższy moduł `forum`
|
|
posiada kontroler nazwany `PostController`, używany [trasy](/doc/guide/basics.controller#route)
|
|
`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`.
|
|
|
|
> Tip|Wskazówka: Jeśli kontroler jest podkatalogiem katalogu `controllers`
|
|
możemy wciąż używać powyższego formatu [trasy](/doc/guide/basics.controller#route).
|
|
Na przykład, zakładając, że kontroler `PostController` znajduje się wewnątrz
|
|
`forum/controllers/admin`, możemy odnieść się do akcji `create` używając `forum/admin/post/create`.
|
|
|
|
|
|
Zagnieżdżone moduły
|
|
-------------
|
|
|
|
Liczba zagnieżdzeń modułów jest nieograniczone. 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ści [modules|CWebModule::modules] swego rodzica,
|
|
w taki sam sposób jak moduły w configuracji 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`.
|
|
|
|
|
|
<div class="revision">$Id: basics.module.txt 2363 2010-08-29 02:35:15Z qiang.xue $</div> |