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
yiicpentru a crea un schelet simplu al unui nou modul. De exemplu, pentru a crea modululforumde 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 caPostControllereste subforum/controllers/admin, putem sa apelam action-ulcreatefolosind 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.