0 follower

Component

Le applicazioni Yii sono costruite su component che sono oggetti scritti per uno scopo
specifico. Un component è un'istanza di CComponent o una sua classe derivata. L'uso di un component coinvolge principalmente l'accesso alle sue proprietà e la generazione/gestione dei suoi eventi. La classe base CComponent specifica come definire le proprietà e gli eventi.

1. Proprietà del component

La proprietà del component è come il membro di una variabile pubblica di un oggetto. Si può leggere il valore od assegnare ad essa un valore. Per esempio,

$width=$component->textWidth;     // recupera la proprietà di textWidth
$component->enableCaching=true;   // imposta la proprietà di enableCaching

Per definire la proprietà di un component, si può semplicemente dichiarare il membro di una variabile pubblica nella classe component. Una modalità più flessibile, comunque, è quella di definire i metodi getter e setter come qui di seguito:

public function getTextWidth()
{
    return $this->_textWidth;
}
 
public function setTextWidth($value)
{
    $this->_textWidth=$value;
}

Il codice qui sopra definisce una proprietà scrivibile chiamata textWidth (il nome è indifferente al maiuscolo/minuscolo). Durante la lettura della proprietà, viene invocata getTextWidth() ed il valore restituito diventa il valore della proprietà; Allo stesso modo, quando viene scritta la proprietà, viene invocata setTextWidth(). Qualora il metodo setter non sia definito, la proprietà sarà a sola lettura ed il tentativo di scrittura genererà un'eccezione. L'uso dei metodi getter e setter per definire una proprietà ha il vantaggio che la logica supplementare (es. l'esecuzione della validazione, la generazione di eventi) può essere eseguita durante la lettura e la scrittura della proprietà.

Note: |Nota: C'è una leggera differenza tra la proprietà definita tramite i metodi getter/setter e la variabile membro di una classe. Il nome della prima è indifferente
al maiuscolo/minuscolo mentre la seconda è sensibile al maiuscolo/minuscolo.

2. Eventi del component

Gli eventi dei component sono proprietà speciali che hanno i metodi (chiamati gestori degli eventi) come loro valori. Il collegamento (assegnazione) di un metodo ad un evento farà si che il metodo venga invocato automaticamente nel momento in cui l'evento venga generato. Quindi, il comportamento di un component può essere modificato in un modo che potrebbe non essere stato previsto durante lo sviluppo del component.

Un evento del component è definito tramite la definizione di un metodo il cui nome inizia con on. Come i nomi delle proprietà sono definiti tramite i metodi getter/setter, i nomi degli eventi sono insensibili al maiuscolo/minuscolo. Il codice che segue definisce un evento onClicked:

public function onClicked($event)
{
    $this->raiseEvent('onClicked', $event);
}

dove $event è una istanza di CEvent o una classe figlia che rappresenta il parametro dell'evento.

Si può collegare un metodo a questo evento come segue:

$component->onClicked=$callback;

dove $callback si riferisce ad una funzione callback valida di PHP. Può essere una funzione globale o un metodo di una classe. Nel secondo caso, la funzione callback deve essere data come array: array($object,'methodName').

La firma di un gestore di evento deve essere come segue:

function methodName($event)
{
    ......
}

dove $event è il parametro che descrive l'evento (che proviene dalla chiamata di raiseEvent()). Il parametro $event è una istanza di CEvent o la sua classe derivata. Come minimo, contiene l'informazione su chi abbia generato l'evento.

Un gestore di eventi può essere anche una funzione anonima che è supportata da PHP 5.3 o superiore. Per esempio,

$component->onClicked=function($event) {
    ......
}

Se ora viene chiamata onClicked(), l'evento onClicked sarà generato (all'interno di onClicked()), ed il gestore di evento collegato sarà invocato automaticamente.

Un evento può essere collegato a più gestori. Quando è generato un evento, i gestori saranno invocati nell'ordine in cui essi sono collegati all'evento. Se un gestore volesse impedire che gli altri gestori venagno invocati, si può impostare $event->handled a true.

3. Behavior del component

Il component supporta il pattern mixin e può essere collegato con uno o più behavior. Un behavior è un oggetto i cui metodi possono essere 'ereditati' dai component collegati tramite lo strumento di collezionare funzionalità piuttosto che specializzazioni (es. normale ereditarietà della classe). Un component può essere collegato a più behavior e ottenere così 'l'ereditarietà multipla'.

Le classi behavior devono implementare l'interfaccia IBehavior. La maggior parte delle behavior possono estendere dalla classe base CBehavior. Se un behavior necessita di essere collegato ad un model, si può estendere da CModelBehavior o CActiveRecordBehavior che implementano funzionalità aggiuntive specifiche per i model.

Per usare un behavior, è necessario che prima sia collegato ad un component chiamando il metodo attach(). Quindi si può chiamare un metodo behavior tramite il component:

// $name identifica univocamente il behavior nel component
$component->attachBehavior($name,$behavior);
// test() è un metodo di $behavior
$component->test();

Un behavior collegato può essere utilizzato come una normale proprietà di un component. Per esempio, se un behavior chiamato tree è collegato ad un component, si può ottenere il riferimento a questo oggetto behavior usando:

$behavior=$component->tree;
// equivalente al seguente codice:
// $behavior=$component->asa('tree');

Un behavior può essere disabilitato temporaneamente cosicché i suoi metodi non sono disponibili tramite il component. Per esempio,

$component->disableBehavior($name);
// la seguente dichiarazione genererà una eccezione
$component->test();
$component->enableBehavior($name);
// adesso funziona
$component->test();

È possibile che due behavior collegati allo stesso componente abbiano metodi con lo stesso nome. In questo caso, il metodo del behavior collegato per primo avrà la precedenza.

Quando sono usati insieme ad eventi, i behavior sono ancora più potenti. Un behavior, quando viene collegato ad un component, può collegare alcuni dei suoi metodi ad alcuni eventi del component. Così facendo, il behavior ha la possibilità di osservare o modificare il normale flusso di esecuzione del component.

Si può accedere alla proprietà di un behavior tramite il component a cui è collegato. Le proprietà comprendono sia i membri di variabili pubbliche che le proprietà definite tramite i getter e/o setter del behavior. Per esempio, se un behavior ha una proprietà chiamata xyz ed il behavior è collegato al component $a, si può usare l'espressione $a->xyz per accedere alla proprietà del behavior.

Found a typo or you think this page needs improvement?
Edit it on github !