Files
yii/docs/guide/ro/basics.module.txt
2009-03-01 01:32:35 +00:00

128 lines
5.8 KiB
Plaintext

Module
======
> Note|Nota: Suportul pentru module este disponibil incepand cu versiunea 1.0.3.
Un modul este o unitate software de sine statatoare care este formata din [modele](/doc/guide/basics.model),
[view-uri](/doc/guide/basics.view), [controllere](/doc/guide/basics.controller) si alte
componente suportate. In multe privinte, un modul seamana cu o [aplicatie](/doc/guide/basics.application).
Principala diferenta este ca un modul nu poate fi decat in interiorul unei aplicatii.
Utilizatorii pot accesa controller-ele dintr-un modul la fel cum acceseaza controller-ele normale din aplicatie.
Modulele sunt utile in cateva scenarii. Pentru o aplicatie complexa, putem alege sa o impartim
in mai multe module, fiecare fiind dezvoltat si intretinut separat. Unele feature-uri, folosite in mod obisnuit,
precum gestiunea utilizatorilor, gestiunea comentariilor, pot fi dezvoltate ca module astfel incat ele vor fi
reutilizate usor in proiectele viitoare.
Creare modul
------------
Un modul este organizat ca un director al carui nume este [ID-ul|CWebModule::id] sau unic.
Strunctura directorului modulului este similara cu cea a [directorului de baza al aplicatiei](/doc/guide/basics.application#application-base-directory).
Structura de directoare tipica a unui modul cu numele `forum` ar arata in felul urmator:
~~~
forum/
ForumModule.php fisierul clasei modulului
components/ contine componente utilizator reutilizabile
views/ contine fisierele view ale widget-urilor
controllers/ contine fisierele claselor controller-elor
DefaultController.php fisierul clasei controller-ului implicit
extensions/ contine extensii third-party
models/ contine fisierele cu clasele modelelor
views/ contine fisierele de layout si view-urile controller-elor
layouts/ contine fisierele layout pt view-uri
default/ contine fisierele view pentru DefaultController
index.php view-ul index
~~~
Un modul trebuie sa aiba o clasa de modul care sa fie derivata din [CWebModule].
Numele clasei este determinat folosind expresia `ucfirst($id).'Module'`,
unde `$id` se refera la ID-ul modulului (acelasi cu numele directorului modulului).
Clasa modulului serveste ca loc central pentru stocarea informatiilor vizibile peste tot
in codul modulului. De exemplu, putem folosi [CWebModule::params] pentru a stoca parametrii
modulului si sa folosim [CWebModule::components] pentru a shera
[componentele aplicatiei](/doc/guide/basics.application#application-component) la nivelul modulului.
> Tip|Sfat: Putem folosi unealta `yiic` pentru a crea un schelet simplu al unui nou modul.
> De exemplu, pentru a crea modulul `forum` de mai sus, putem executa urmatoarele comenzi
intr-o linie de comanda:
>
> ~~~
> % cd WebRoot/testdrive
> % protected/yiic shell
> Yii Interactive Tool v1.0
> Please type 'help' for help. Type 'exit' to quit.
> >> module forum
> ~~~
Folosirea modulului
-------------------
Pentru a folosi un modul, trebuie sa punem directorul modulului in directorul
`modules` din [directorul de baza al aplicatiei](/doc/guide/basics.application#application-base-directory).
Apoi sa declaram ID-ul modulului in proprietatea [modules|CWebApplication::modules] a aplicatiei.
De exemplu, pentru a folosi modulul `forum` de mai sus, putem folosi urmatoarea
[configuratie de aplicatie](/doc/guide/basics.application#application-configuration):
~~~
[php]
return array(
......
'modules'=>array('forum',...),
......
);
~~~
Un modul poate sa fie de asemenea configurat cu valori initiale pentru proprietatile sale.
Folosirea este foarte similara cu configurarea [componentelor aplicatiei](/doc/guide/basics.application#application-component).
De exemplu, modulul `forum` poate avea o proprietate cu numele `postPerPage` (in clasa sa) care poate fi configurata
in [configuratia aplicatiei](/doc/guide/basics.application#application-configuration) in felul urmator:
~~~
[php]
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
~~~
Instanta modulului poate fi accesata prin proprietatea [module|CController::module] a controller-ului activ in acest moment.
Prin instanta modulului, putem accesa apoi informatiile care sunt sherate la nivel de modul.
De exemplu, pentru a accesa informatia `postPerPage` de mai sus, putem folosi urmatoarea expresie:
~~~
[php]
$postPerPage=Yii::app()->controller->module->postPerPage;
// sau urmatoarea daca $this se refera la instanta controller-ului
// $postPerPage=$this->module->postPerPage;
~~~
Un action de controller din interiorul unui modul poate fi accesat prin
[ruta](/doc/guide/basics.controller#route) `moduleID/controllerID/actionID`.
De exemplu, presupunand ca modulul `forum` de mai sus are un controller cu numele `PostController`,
putem folosi [ruta](/doc/guide/basics.controller#route) `forum/post/create` pentru a ne referi la action-ul `create` din acest controller.
URL-ul corespunzator pentru aceasta ruta va fi `http://www.example.com/index.php?r=forum/post/create`.
> Tip|Sfat: Daca un controller este intr-un subdirector din `controllers`, inca
> putem folosi formatul [rutei](/doc/guide/basics.controller#route) de mai sus. De exemplu,
> presupunand ca `PostController` este sub `forum/controllers/admin`, putem sa apelam
> action-ul `create` folosind ruta `forum/admin/post/create`.
Module imbricate
----------------
Modulele pot fi imbricate. Adica, un modul poate contine alt modul. Le puntem denumi
*modulul parinte* si *modulul copil*. Modulele copil trebuie sa fie pus in directorul `modules`
al modulului parinte. Pentru a accesa un action al unui controller dintr-un modul copil,
trebuie sa folosim ruta `parentModuleID/childModuleID/controllerID/actionID`.
<div class="revision">$Id: basics.module.txt 745 2009-02-25 21:45:42Z qiang.xue $</div>