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, view-uri, controllere si alte componente suportate. In multe privinte, un modul seamana cu o aplicatie. 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.
Un modul este organizat ca un director al carui nume este ID-ul sau unic.
Strunctura directorului modulului este similara cu cea a directorului de baza al aplicatiei.
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 la nivelul modulului.
Sfat: Putem folosi unealta
yiic
pentru a crea un schelet simplu al unui nou modul. De exemplu, pentru a crea modululforum
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
Pentru a folosi un modul, trebuie sa punem directorul modulului in directorul
modules
din directorul de baza al aplicatiei.
Apoi sa declaram ID-ul modulului in proprietatea modules a aplicatiei.
De exemplu, pentru a folosi modulul forum
de mai sus, putem folosi urmatoarea
configuratie de aplicatie:
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.
De exemplu, modulul forum
poate avea o proprietate cu numele postPerPage
(in clasa sa) care poate fi configurata
in configuratia aplicatiei in felul urmator:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
Instanta modulului poate fi accesata prin proprietatea 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:
$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 moduleID/controllerID/actionID
.
De exemplu, presupunand ca modulul forum
de mai sus are un controller cu numele PostController
,
putem folosi ruta 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
.
Sfat: Daca un controller este intr-un subdirector din
controllers
, inca putem folosi formatul rutei de mai sus. De exemplu, presupunand caPostController
este subforum/controllers/admin
, putem sa apelam action-ulcreate
folosind rutaforum/admin/post/create
.
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
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.