MÀrk: Stöd för moduler har varit tillgÀngligt fr o m version 1.0.3.
En modul Àr en komplett och oberoende mjukvaruenhet som bestÄr av modeller, vyer, kontrollrar samt andra stödkomponenter. En modul motsvarar ur mÄnga aspekter en applikation. Den huvudsakliga skillnaden Àr att en modul inte kan sÀttas ut pÄ egen hand, den mÄste hÀrbÀrgeras i en applikation. AnvÀndare kan komma Ät en kontroller i en modul sÄ som de gör med en vanlig kontroller pÄ applikationsnivÄ.
Moduler Àr anvÀndbara i ett flertal scenarier. En storskalig applikation kan delas upp i flera moduler, som var och en utvecklas och underhÄlls separat. Vissa vanligen anvÀnda finesser, som administrering av anvÀndare eller kommentarhantering, kan utvecklas i form av moduler vilka utan svÄrighet kan ÄteranvÀndas i kommande projekt.
En modul organiseras i en katalog vars namn bildar dess unika ID. Modulkatalogens struktur
liknar strukturen hos applikationens rotkatalog.
Nedan visas den typiska katalogstrukturen för en modul benÀmnd forum:
forum/
ForumModule.php modulens klassfil
components/ innehÄller ÄteranvÀndbara komponenter
views/ innehÄller vyfiler för widget
controllers/ innehÄller kontrollerklassfiler
DefaultController.php standardkontrollerns klassfil
extensions/ innehÄller tredjepartstillÀgg
models/ innehÄller modellklassfiler
views/ innehÄller kontrollervyfiler och layoutfiler
layouts/ innehÄller layoutvyfiler
default/ innehÄller vyfiler för DefaultController
index.php fil som innehÄller indexvy
En modul mÄste ha en modulklass som Àrver frÄn och utvidgar CWebModule. Klassnamnet bildas med hjÀlp av
uttrycket ucfirst($id).'Module', dÀr $id refererar till modulens ID (lÀs: modulens katalognamn).
Modulklassen utgör den centrala platsen för lagring av information som skall delas av modulens kod.
Vi kan till exempel anvÀnda CWebModule::params för lagring av modulparametrar, samt anvÀnda
CWebModule::components för att dela applikationskomponenter
pÄ modulnivÄ.
Tips: Verktyget
yiickan anvÀndas för att skapa det grundlÀggande skelettet till en ny modul. Till exempel, för att skapa ovanstÄendeforum-modul, kan vi exekvera följande kommandon i ett kommandoradsfönster:% cd WebRoot/testdrive % protected/yiic shell Yii Interactive Tool v1.0 Please type 'help' for help. Type 'exit' to quit. >> module forum
För att anvÀnda en modul, placera först modulkatalogen under katalogen modules i
applikationens rotkatalog.
Deklarera sedan modulens ID i applikationens property modules.
För att till exempel anvÀnda ovanstÄende forum-modul, kan följande
applikationskonfiguration
anvÀndas:
return array(
......
'modules'=>array('forum',...),
......
);En modul kan Àven konfigureras med initiala propertyvÀrden. TillvÀgagÄngssÀttet Àr mycket snarlikt
konfigurering av applikationskomponenter.
Exempel: forum-modulen kan i sin modulklass ha en property postPerPage, vilken kan konfigureras i
applikationskonfigurationen pÄ följande sÀtt:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);Modulinstansen kan kommas Ät via propertyn module i den för tillfÀllet aktiva kontrollern.
Genom modulinstansen kan vi sedan nÄ information som delas pÄ modulnivÄ. Exempelvis kan följande uttryck anvÀndas
för att komma Ät ovanstÄende postPerPage-information:
$postPerPage=Yii::app()->controller->module->postPerPage;
// or the following if $this refers to the controller instance
// $postPerPage=$this->module->postPerPage;En kontrollerÄtgÀrd i en modul kan nÄs via en route pÄ formatet
moduleID/controllerID/actionID. Exempel: om vi antar att ovanstÄende forum-modul har en
kontroller PostController, kan vi som route anvÀnda
forum/post/create för att referera till ÄtgÀrden create i denna kontroller. Motsvarande
URL för denna route blir dÄ http://www.example.com/index.php?r=forum/post/create.
Tips: Om en kontroller finns i en underkatalog till
controllers, kan vi fortfarande anvÀnda ovanstÄende route format. Till exempel omPostControllerÀr placerad underforum/controllers/adminkan vi referera till ÄtgÀrdencreategenom att anvÀndaforum/admin/post/create.
Moduler kan vara nÀstlade. Det vill sÀga, en modul kan innehÄlla en annan modul.
Vi kallar den förra förÀldramodul (parent module), den senare barnmodul (child module).
Barnmoduler mÄste placeras i underkataloger till förÀldramodulens modules-katalog.
För att komma Ät en kontrollerÄtgÀrd i en barnmodul, anvÀnder vi följande route
parentModuleID/childModuleID/controllerID/actionID.
Signup or Login in order to comment.