Inhaltsverzeichnis
回复内容:
Heim Backend-Entwicklung PHP-Tutorial yii2 关于事件的疑问

yii2 关于事件的疑问

Jun 06, 2016 pm 08:06 PM
php yii yii2

在yii中的Application的run方法中,只看到各种trigger,并没有看到各种事件的绑定?请问,这些事件在哪里绑定的?

回复内容:

在yii中的Application的run方法中,只看到各种trigger,并没有看到各种事件的绑定?请问,这些事件在哪里绑定的?

一定要多看官方文档

事件的绑定
有了事件handler,还要告诉Yii,这个handler是负责处理哪种事件的。这个过程,就是事件的绑定, 把事件和事件handler这两个蚂蚱绑在一根绳上,当事件跳起来的时候,就会扯动事件handler啦。

yiibaseComponent::on() 就是用来绑定的,很容易就猜到, yiibaseComponent::off()
就是用来解除的。对于绑定,有以下形式:

<code>$person = new Person;

// 使用PHP全局函数作为handler来进行绑定
$person->on(Person::EVENT_GREET, 'person_say_hello');

// 使用对象$obj的成员函数say_hello来进行绑定
$person->on(Person::EVENT_GREET, [$obj, 'say_hello']);

// 使用类Greet的静态成员函数say_hello进行绑定
$person->on(Person::EVENT_GREET, ['app\helper\Greet', 'say_hello']);

// 使用匿名函数
$person->on(Person::EVENT_GREET, function ($event) {
    echo 'Hello';
});</code>
Nach dem Login kopieren

事件的绑定可以像上面这样在运行时以代码的形式进行绑定,也可以在配置中进行绑定。 当然,这个配置生效的过程其实也是在运行时的。原理可以参见 配置项(Configuration) 部分的内容。

上面的例子只是简单的绑定了事件与事件handler,如果有额外的数据传递给handler,可以使用
yiibaseComponent::on() 的第三个参数。这个参数将会写进 Event 的相关数据字段,即属性 data 。如:

<code>$person->on(Person::EVENT_GREET, 'person_say_hello', 'Hello World!');

// 'Hello World!' 可以通过 $event访问。
function person_say_hello($event)
{
    echo $event->data;                // 将显示 Hello World!
}</code>
Nach dem Login kopieren

yiibaseComponent 维护了一个handler数组,用来保存绑定的handler:

<code>// 这个就是handler数组
private _events = [];

// 绑定过程就是将handler写入_event[]
public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}</code>
Nach dem Login kopieren

绑定当然是你自己写。
比如,Yii框架会在查询成功之后触发EVENT_AFTER_FIND事件,至于你想在查询成功之后做些什么,这是你自己的事,根据你的需要来,框架怎么会知道。所以是你来调用on方法给事件绑定回调函数。

补充:
我说的框架不管绑定不是说框架一个事件都不绑定,而是指并不是框架触发的每个事件它自己都要绑定一下。
题主到底懂不懂事件机制啊,触发事件是为了让你去绑定方法来执行。它如果不触发,那你怎么用啊。
比如你看下面的代码,我实现了一个函数:

<code>function sum(a, b) {
    trigger('before_sum');
    return a + b;
}</code>
Nach dem Login kopieren

我一定要给before_sum事件绑定个处理函数吗?
我的sum函数是给别人用的,我触发这个事件是为了他可以使用。他可以绑定事件以便在执行sum的时候先执行他自己的一段代码。
我自己给before_sum绑定处理函数干嘛?我想在return之前执行什么代码我直接写进去不就行了。

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles