10 Komponensek
Bevezetés
A kompenenseket a vezérlők bizonyos körülmények közötti segítésére használjuk. A Cake belső könyvtárainak bővítése helyett speciális funkcionalitásokat komponensekké alakíthatunk.
Egy olle nevű srác mondta egyszer IRC-n: a komponensek kis megosztható "vezérlőcskék". Szerintünk ez egy jó definíció. A fő cél az újrafelhasználhatóság. Egy kis analógiával a komponens az a vezérlőnek, mint a segítő a nézetnek. A lényegi különbség az, hogy a komponensek üzleti logikát, míg a segítők prezentációs logikát tartalmaznak. Ez a pont valójában nagyon is fontos. Egy állandóan előforduló zavaró tényező az újdonsült Baker-ek számára, akik az újrafelhasználhatóságot próbálják elérni: X dolgot próbálok megvalósítani, most ez komponens vagy segítő legyen? A válasz egész egyszerű: Mit csinál X? Üzleti, prezentációs, vagy mindkét logikát használja-e X? Ha üzleti logikát, akkor komponens. Ha prezentációs logikát, akkor segítő. Ha mindkettőt, ... nos, akkor komponens is és segítő is egyben.
Egy példa lenne az utóbbira egy hitelesítő (autentikációs) rendszer. Szeretnéd ha be/ki lehetne lépni, korlátoznád a hozzáférést az erőforrásokhoz (egy esemény: szerkesztés, hozzáadás, törlés... vagy egy url) - mindez üzleti logika - szóval ez egy komponens kell legyen. Ugyanakkor szeretnél néhány bejegyzést hozzáadni a főmenühöz, amikor egy felhasználó be van jelentkezve - ez pedig prezentációs logika.
Saját komponens készítése
Komponens készítéséhez készíts egy új fájlt az app/controllers/components/ könyvtárban.
Tételezzük fel, hogy készítettél egy foo.php nevű fájlt. Ebben a fájlban készítened kell egy osztályt, ami megfelel a fájl nevének (hozzáfűzve a 'Component' végződést). Ebben az esetben ezt írnád:
Egy egyszerű komponens:
class FooComponent extends Object
{
var $someVar = null;
var $controller = true;
function startup(&$controller)
{
// This method takes a reference to the controller which is loading it.
// Perform controller initialization here.
}
function doFoo()
{
$this->someVar = 'foo';
}
}
class FooComponent extends Object{var $someVar = null;var $controller = true;function startup(&$controller){// This method takes a reference to the controller which is loading it.// Perform controller initialization here.}function doFoo(){$this->someVar = 'foo';}}
Hogy ezt használni is tudd, add hozzá az alábbi kódot a vezérlődhöz:
var $components = array('Foo'); var $components = array('Foo');
A komponenst most már használhatod is így:
$this->Foo->doFoo();
$this->Foo->doFoo();
Egy komponens hozzáférhet az őt betöltő vezérlőhöz a startup() metódus segítségével, ahogy fentebb láthattuk. Ez rögtön a Controller::beforeFilter() lefutása után hívódik meg. Így a beforeFilter()-ben beállíthatsz különféle komponens tualjdonságokat, amik meghatározzák mi történjen majd a startup() metódusban.
Ha a modelleidet szeretnéd a komponenseidben használni, létrehozhatsz egy új példányt így:
$foo =& new Foo();
$foo =& new Foo();
Használhatsz más komponenseket egy komponensen belül is. Pusztán deklarálnod kell, milyen más komponenseket szeretnél elérni. Egy példa lentebb, ahol a session komponenst használjuk.
var $components = array('Session'); var $components = array('Session');
Komponenseid publikálása
Ha úgy érzed, komponensed hasznos lehet mások számára is, add hozzá a CakeForge-hoz. Egy komponens, ami egyre több ember számára hasznos a közösségben, egy nap a fő Cake disztribúcióban is benne lehet. Ellenőrizd a snippet (kódmorzsák) archívumot is a felhasználók által beküldött komponensekért.
