Un modulo è una unità software autosufficiente che consiste in model, view, controller ed altri componenti di supporto. In molti aspetti, un modulo assomiglia ad una applicazione. La differenza principale consiste nel fatto che un modulo non può essere utilizzato da solo ma deve risiedere all'interno di una applicazione. Gli utenti possono accedere al controller di un modulo così come farebbero con il controller di una normale applicazione.
I moduli sono utili in diversi scenari. Le applicazioni di grandi dimensioni, si possono dividere in diversi moduli, ciascuno dei quali può essere sviluppato e mantenuto separatamente. Alcune funzionalità di uso comune, come la gestione degli utenti, la gestione dei contenuti, possono essere sviluppate in termini di moduli che possono essere riutilizzati in progetti futuri.
Un modulo è organizzato come una cartella il cui nome viene utilizzato quale suo
ID univoco. La struttura della cartella del modulo è simile a quella della
cartella principale dell'applicazione.
Il codice seguente mostra la struttura tipica delle cartelle di un modulo che si chiama forum
:
forum/ ForumModule.php il file della classe del modulo components/ contiene componenti utente riutilizzabili views/ contiene i file delle view dei widget controllers/ contiene i file delle classi controller DefaultController.php il file di default della classe controller extensions/ contiene le estensioni sviluppate da terze parti models/ contiene i file delle classi model views/ contiene i file delle view e dei layout layouts/ contiene i file delle view dei layout default/ contiene i file delle view del DefaultController index.php il file index della view
Un modulo deve avere una classe module che estende da CWebModule. Il nome della
classe è determinato utilizzando l'espressione ucfirst($id).'Module'
, dove $id
si riferisce a l'ID del modulo (o il nome della cartella del modulo). La classe
del modulo serve quale luogo centrale per la memorizzazione delle informazioni
condivise lungo tutto il codice del modulo. Per esempio, si può utilizzare
CWebModule::params per memorizzare i parametri del modulo, ed usare
CWebModule::components per condividere i
component dell'applicazione
a livello di modulo.
Suggerimento: È possibile usare il generatore di moduli Gii per creare la struttura di base di un nuovo modulo.
Per usare un modulo, prima piazzare la cartella del modulo all'interno della cartella modules
della
cartella principale dell'applicazione.
Quindi dichiarare l'ID del modulo nella proprietà modules dell'applicazione.
Per esempio, per poter utilizzare il modulo forum
di prima, si può utilizzare la seguente
configurazione dell'applicazione:
return array(
......
'modules'=>array('forum',...),
......
);
Un modulo può essere anche configurato con valori iniziali delle proprietà.
L'uso è molto simile alla configurazione dei
component dell'applicazione.
Per esempio, il modulo forum
potrebbe avere una proprietà che si chiama postPerPage
nella sua classe del modulo che può essere configurata nella
configurazione dell'applicazione
come segue:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
È possibile accedere all'istanza del modulo tramite la proprietà module
del controller attualmente attivo. Tramite l'istanza del modulo, si accedere alle informazioni
che sono condivise a livello modulo. Per esempio, per poter accedere all'informazione
postPerPage
vista prima, si può utilizzare la seguente espressione:
$postPerPage=Yii::app()->controller->module->postPerPage;
// ovvero il codice seguente qualora $this si riferisca all'istanza del controller
// $postPerPage=$this->module->postPerPage;
È possibile accedere all'action del controller in un modulo utilizzando la
route moduleID/controllerID/actionID
.
Per esempio, supponendo che il precedente modulo forum
abbia un controller che
si chiami PostController
, si può usare la route
forum/post/create
per riferirsi all'action create
di questo controller. L'URL
corrispondente per questa route sarebbe http://www.example.com/index.php?r=forum/post/create
.
Suggerimento: Se un controller si trova nella cartella
controllers
, è possibile ancora utilizzare il precedente formato di route. Per esempio, supponendo chePostController
si trovi all'interno diforum/controllers/admin
, si può fare riferimento all'actioncreate
usandoforum/admin/post/create
.
I moduli possono essere annidati indefinitamente. Cioè, un modulo può contenere un'altro modulo che a sua volta può contenere ancora un'altro modulo. Il primo si chiama modulo genitore mentre il secondo si chiama modulo figlio. I moduli figlio possono essere dichiarati nella proprietà del modulo del loro modulo genitore, così come si dichiarano i moduli nella configurazione dell'applicazione vista prima.
Per accedere all'action del controller di un modulo figlio, si dovrebbe usare la
route 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.