Heim  >  Artikel  >  Backend-Entwicklung  >  Yii Framework Offizieller Leitfaden Serie 10 – Grundlagen: Komponenten

Yii Framework Offizieller Leitfaden Serie 10 – Grundlagen: Komponenten

黄舟
黄舟Original
2017-02-11 09:41:561027Durchsuche



Yii-Anwendungen basieren auf Komponenten. Komponenten sind Instanzen von CComponent oder seinen Unterklassen. Bei der Verwendung einer Komponente geht es vor allem darum, auf ihre Eigenschaften zuzugreifen und zu erfahren, wann sie ausgelöst oder verarbeitet werden soll. Die Basisklasse CComponent gibt an, wie Eigenschaften und Ereignisse definiert werden.

1. Komponenteneigenschaften

Die Eigenschaften einer Komponente sind wie die öffentlichen Mitgliedsvariablen eines Objekts. Es ist lesbar und beschreibbar. Zum Beispiel:


$width=$component->textWidth;     // 获取 textWidth 属性
$component->enableCaching=true;   // 设置 enableCaching 属性

Um eine Komponenteneigenschaft zu definieren, müssen wir nur eine öffentliche Mitgliedsvariable im definieren Komponentenklasse Das ist es. Eine flexiblere Möglichkeit besteht darin, die Getter- und Setter-Methoden zu definieren, zum Beispiel:


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

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

Der obige Code definiert a Schreiben Sie den Attributnamen als textWidth (bei Namen wird die Groß-/Kleinschreibung nicht beachtet). Wenn ein Attribut gelesen wird, wird getTextWidth() aufgerufen, und sein Rückgabewert wird zum Attributwert. Ebenso wird setTextWidth() aufgerufen, wenn ein Attribut geschrieben wird. Wenn die Setter-Methode nicht definiert ist, ist die Eigenschaft schreibgeschützt und es wird eine Ausnahme ausgelöst, wenn darauf geschrieben wird. Ein Vorteil der Definition einer Eigenschaft mithilfe von Getter- und Setter-Methoden besteht darin, dass beim Lesen oder Schreiben der Eigenschaft zusätzliche Logik ausgeführt werden kann (z. B. Durchführen von Validierungen, Auslösen von Ereignissen).

Hinweis: Es gibt einen subtilen Unterschied zwischen Eigenschaften, die über Getter/Setter definiert werden, und Klassenmitgliedsvariablen. Beim ersteren Namen wird die Groß-/Kleinschreibung nicht beachtet, während beim letzteren Namen die Groß-/Kleinschreibung beachtet wird.

2. Komponentenereignisse

Komponentenereignisse sind spezielle Eigenschaften, die einige Methoden namens 事件句柄 (event handlers) als Werte verwenden. Durch das Anhängen (Zuweisen) einer Methode an ein Ereignis wird die Methode automatisch dort aufgerufen, wo das Ereignis ausgelöst wird. Daher kann sich das Verhalten einer Komponente auf eine Weise ändern, die während der Komponentenentwicklung unvorhergesehen war.

Komponentenereignisse werden mit einer Benennungsmethode definiert, die mit on beginnt. Wie bei Eigenschaften, die durch Getter/Setter-Methoden definiert werden, wird bei Ereignisnamen die Groß-/Kleinschreibung nicht beachtet. Der folgende Code definiert ein onClicked-Ereignis:


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

Das $event wird hier als Ereignisparameter verwendet ist CEvent oder eine Instanz seiner Unterklasse.

Wir können diesem Ereignis eine Methode wie folgt hinzufügen:


$component->onClicked=$callback;

hier Das $callback zeigt auf einen gültigen PHP-Callback. Es kann eine globale Funktion oder eine Methode in einer Klasse sein. Ist letzteres der Fall, muss es als Array bereitgestellt werden: array($object,'methodName').

Der Aufbau des Event-Handles ist wie folgt:


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

Hier ist $event der Parameter, der das Ereignis beschreibt (er kommt vom raiseEvent()-Aufruf). $event Parameter sind Instanzen von CEvent oder seinen Unterklassen. Es enthält zumindest Informationen darüber, wer das Ereignis ausgelöst hat.

Ab Version 1.0.10 kann der Event-Handler auch eine anonyme Funktion sein, die von PHP 5.3 und höher unterstützt wird. Zum Beispiel


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

Wenn wir nun onClicked() aufrufen, wird das onClicked-Ereignis ausgelöst ( in onClicked() ), wird der angehängte Event-Handler automatisch aufgerufen.

Ein Ereignis kann an mehrere Handles gebunden werden. Wenn ein Ereignis ausgelöst wird, werden diese Handler in der Reihenfolge ausgeführt, in der sie an das Ereignis gebunden waren. Wenn der Handler beschließt, die Ausführung nachfolgender Handler zu verhindern, kann er $event->handled auf true setzen.

3. Komponentenverhalten

Ab Version 1.0.2 bietet die Komponente Unterstützung für Mixins und kann ein oder mehrere Verhaltensweisen binden. Ein Verhalten ist ein Objekt, dessen Methoden von der Komponente, an die es gebunden ist, durch Sammeln von Funktionen 继承(inherited) implementiert werden können, und nicht durch spezialisierte Vererbung (d. h. durch gewöhnliche Klassenvererbung). Eine Komponente kann „Mehrfachvererbung“ sein Wird verwendet, um die Bindung mehrerer Verhaltensweisen zu implementieren.

Die Verhaltensklasse muss die IBehavior-Schnittstelle implementieren . Die meisten Verhaltensweisen können von CBehavior geerbt werden. Wenn ein Verhalten an ein Modell gebunden werden muss, kann es auch von CModelBehavior oder CActiveRecordBehavior erben, die Bindungsfunktionen speziell für das Modell implementieren.

Um ein Verhalten zu verwenden, muss es zunächst an eine Komponente gebunden werden , indem die Methode attachment() dieses Verhaltens aufgerufen wird. Dann können wir diese Verhaltensmethode über die Komponente aufrufen:


// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);
// test() 是行为中的方法。
$component->test();

Das gebundene Verhalten kann wie eine Komponente sein, auf die zugegriffen wird wie normale Eigenschaften in . Wenn beispielsweise ein Verhalten mit dem Namen tree an eine Komponente gebunden ist, können wir über den folgenden Code einen Verweis auf dieses Verhalten erhalten.


$behavior=$component->tree;
// 等于下行代码:
// $behavior=$component->asa('tree');

Verhalten kann vorübergehend deaktiviert werden, woraufhin seine Methode in der Komponente ungültig wird. Zum Beispiel :


$component->disableBehavior($name);
// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);
// 现在就可以使用了
$component->test();

两个同名行为绑定到同一个组件下是有可能的。在这种情况下,先绑定的行为则拥有优先权。

当和 events, 一起使用时,行为会更加强大。当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就可以观察或者改变组件的常规执行流程。

自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 例如, 若一个行为有一个 xyz 的属性,此行为被绑定到组件 $a,然后我们可以使用表达式 $a->xyz 访问此行为的属性。

以上就是Yii框架官方指南系列10——基础知识:组件的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn