mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 00:04:07 +01:00
135 lines
6.0 KiB
Plaintext
135 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|Wskazówka: Możemy użyć narzędzia `yiic` do stworzenia podstawowego szkieletu nowego
|
|
modułu. Na przykład, aby utworzyć powyższy moduł forum `forum` 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
|
|
> ~~~
|
|
|
|
|
|
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
|
|
-------------
|
|
|
|
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`.
|
|
|
|
|
|
<div class="revision">$Id: basics.module.txt 745 2009-02-25 21:45:42Z qiang.xue $</div> |