Files
yii/docs/guide/pl/basics.module.txt
2010-09-05 13:02:42 +00:00

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>