목차
코드 구현
객체 수준 바인딩
그래서 최종 결과는 당연히 개 소리가 부족할 것입니다
페이지를 새로고침하고
백엔드 개발 PHP 튜토리얼 Yii2의 EVENT 이벤트 예시에 대한 자세한 설명

Yii2의 EVENT 이벤트 예시에 대한 자세한 설명

Aug 13, 2017 am 09:08 AM
event yii2

이벤트 소개

이벤트를 사용하면 특정 시점에 미리 설정된 코드 조각이 실행되도록 할 수 있습니다. 이벤트는 코드를 분리하는 방법일 뿐만 아니라 비즈니스 프로세스를 설계하기 위한 패턴이기도 합니다. 최신 소프트웨어에서는 이벤트가 어디에나 있습니다. 예를 들어, 귀하가 Weibo를 게시하면 이벤트가 발생하여 귀하를 팔로우하는 사람들이 귀하의 새 콘텐츠를 보게 됩니다. 이벤트에는 다음과 같은 여러 요소가 있습니다.

  • 이것은 어떤 종류의 이벤트인가요? 소프트웨어 시스템에는 새로운 웨이보를 게시하는 것도 이벤트이고, 웨이보를 삭제하는 것도 이벤트입니다.

  • 이벤트를 일으킨 사람은 누구인가요? 귀하가 Weibo에 게시하는 내용이 귀하가 실행하는 이벤트입니다.

  • 이 이벤트를 모니터링하는 책임은 누구에게 있습니까? 아니면 이런 일이 일어났는지 누가 알겠습니까? 사용자 등록을 처리하는 서버의 모듈은 귀하의 새로운 Weibo 이벤트를 확실히 수신하지 않습니다.

  • 사고 처리 방법은 무엇인가요? 웨이보를 새로 발행하는 경우, 자신을 팔로우하는 다른 사용자들에게 알리기 위한 것입니다.

  • 이벤트 관련 데이터는 무엇인가요? 새로운 웨이보 이벤트를 게시하려면 포함된 데이터에 적어도 새로운 웨이보의 내용, 시간 등이 포함되어야 합니다.

코드 구현

객체 수준 바인딩

사례 소개: 도망갈 고양이가 있습니다. 마우스를 호출하자마자
이 예제를 구현하기 위해 frontend 폴더의 event 폴더
event 폴더를 만듭니다. event 폴더에는 2개의 클래스 파일, 하나는 Cat이 있습니다. 클래스와 하나의

Mouse

클래스

<?php

namespace frontend\event;

/**
 * 猫类
 * Class: \frontend\event\Cat
 * 
 * 为了让猫具有事件能力
 * 所以要继承 \yii\base\Component
 * >>> \yii\base\Component 对 \yii\base\Event 的 on 方法进行重写
 * >>> \yii\base\Event 适合类级绑定
 * >>> \yii\base\Component 适合对象级绑定
 */
class Cat extends \yii\base\Component
{
    /**
     * 猫发出叫声
     */
    public function shout()
    {
        echo &#39;猫:miao miao miao <br />&#39;;
        
        // 猫叫了之后 触发猫的 miao 事件
        $this->trigger(&#39;miao&#39;);
    }
}
로그인 후 복사

Mouse.php

<?php

namespace frontend\event;

/**
 * 老鼠类
 * Class: \frontend\event\Mouse
 */
class Mouse
{
    public function run()
    {
        echo &#39;老鼠:有猫来了,赶紧跑啊~~<br />&#39;;
    }
}
로그인 후 복사

EventController.php

<?php

namespace frontend\controllers;

use frontend\event\Cat;
use frontend\event\Mouse;

/**
* Class: \frontend\controllers\Event
*/
class EventController extends \yii\web\Controller
{
    public function actionTest()
    {
        $cat = new Cat();
        $mouse = new Mouse();

        // 需事先给猫绑定 miao 事件才可以触发此事件
        // 猫一叫,就触发老鼠的 run 方法
        $cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);

        // 猫发出叫声
        $cat->shout();
    }
}
로그인 후 복사

브라우저에 http://yourdomain.com/?r=event/test

를 입력하고

猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
로그인 후 복사

를 호출하여 고양이의 외침 방법, 먀오족 이벤트가 발생하고 쥐가 도망갑니다

갑자기 이 사건에 개가 가담하는데, 고양이가 짖기만 하면 개가 고양이에게로 가겠죠

그래서 이벤트 폴더에도

개 멤버 추가 Dog.php

<?php

namespace frontend\event;

/**
 * Class \frontend\event\Dog
 */
class Dog extends \yii\base\Component
{
    /**
     * 找猫
     */
    public function findCat()
    {
        echo &#39;狗:wang wang wang, 猫在哪里??&#39;;
    }
}
로그인 후 복사

modify frontend/controllers/EventController.php

개 추가 고양이 찾기 이벤트

...
// 需事先给猫绑定 miao 事件才可以触发此事件
// 猫一叫,就触发老鼠的 run 方法
$cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);
$cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]); // 添加狗找猫事件

// 让猫发出叫声
$cat->shout();
...
로그인 후 복사

Refresh http://yourdomain.com/?r=event/test

Get

猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
狗:wang wang wang, 猫在哪里??
로그인 후 복사

갑자기, 개는 심심해서 더 이상 고양이를 찾기 싫어서 아무렇게나 짖었습니다

그래서 고양이 이벤트를 찾는 개를 바인딩 해제하기만 하면 됩니다

frontend/controllers/EventController.php를 수정

use frontend\event\Cat;
use frontend\event\Mouse;
use frontend\event\Dog;
...
public function actionTest()
{
    $cat = new Cat();
    $mouse = new Mouse();
    $dog = new Dog();

    // 需事先给猫绑定 miao 事件才可以触发此事件
    // 猫一叫,就触发老鼠的 run 方法
    $cat->on(&#39;miao&#39;, [$mouse, &#39;run&#39;]);
    $cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);

    // 并非直接删除 $cat->on(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);
    // 而是通过 off 解除绑定
    $cat->off(&#39;miao&#39;, [$dog, &#39;findCat&#39;]);

    // 让猫发出叫声
    $cat->shout();
}
...
로그인 후 복사

그래서 최종 결과는 당연히 개 소리가 부족할 것입니다

클래스 레벨 바인딩하지만 문제가 있습니다. 위 이벤트는
$cat이 할당한 객체에 대해 add

(new Cat())->shout( );

frontend/controllers/EventController.php의 actionTest 메소드 끝에 있습니다. 미아오 이벤트는 트리거되지 않습니다

public function actionTest()
{
    ... 

    // 让猫发出叫声
    $cat->shout(); // 会触发 miao 事件
    (new Cat())->shout(); // 不会触发 miao 事件
}
로그인 후 복사
이유:
이벤트 바인딩은 $cat 객체를 통해 수행됩니다
마우스가 고양이 소리만 나면 도망가나요? ? 이를 위해서는

클래스 레벨

이벤트 바인딩을 사용해야 합니다.
클래스 레벨 이벤트 바인딩을 위해서는 yiibaseEvent 클래스를 사용해야 합니다.

modify frontend/controllers/EventController.php

use frontend\event\Cat;
use frontend\event\Mouse;
use yii\base\Event;
...
public function actionTest()
{
    $cat = new Cat();
    $mouse = new Mouse();

    // 类级别的事件绑定
    // 只要猫发出声音,不管是什么猫,都会触发老鼠的 run 方法
    Event::on(Cat::className() ,&#39;miao&#39;, [$mouse, &#39;run&#39;]);

    // 让猫发出叫声
    $cat->shout(); // 会触发 miao 事件
    (new Cat())->shout(); // 会触发 miao 事件
}
로그인 후 복사

페이지를 새로고침하고

猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
猫:miao miao miao 
老鼠:有猫来了,赶紧跑啊~~
로그인 후 복사
    summary
  • 를 가져옵니다.

  • 이벤트 바인딩 분류 객체 레벨과 클래스 레벨 바인딩
  • 객체 레벨은 특정 인스턴스화된 객체에만 적용됩니다
  • 클래스 레벨은 인스턴스화된 모든 객체에 적용됩니다

🎜위 내용을 이해하셨다면 오류가 있으면 언제든지 지적하고 수정해주세요🎜

위 내용은 Yii2의 EVENT 이벤트 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python의 SVM 예제 Python의 SVM 예제 Jun 11, 2023 pm 08:42 PM

Python의 SVM(Support Vector Machine)은 분류 및 회귀 문제를 해결하는 데 사용할 수 있는 강력한 지도 학습 알고리즘입니다. SVM은 고차원 데이터와 비선형 문제를 처리할 때 탁월한 성능을 발휘하며 데이터 마이닝, 이미지 분류, 텍스트 분류, 생물정보학 및 기타 분야에서 널리 사용됩니다. 이번 글에서는 Python에서 분류를 위해 SVM을 사용하는 예를 소개하겠습니다. scikit-learn 라이브러리의 SVM 모델을 사용하겠습니다.

yii2에서 jquery를 제거하는 방법 yii2에서 jquery를 제거하는 방법 Feb 17, 2023 am 09:55 AM

yii2에서 jquery를 제거하는 방법: 1. AppAsset.php 파일을 편집하고 $dependents 변수의 "yii\web\YiiAsset" 값을 주석 처리합니다. 2. main.php 파일을 편집하고 구성을 "'yii"로 추가합니다. "comComponents" \web\JqueryAsset' => ['js' => [],'sourcePath' => null,]" 필드 아래에서 jquery 스크립트를 제거합니다.

PHP8.0의 이벤트 처리 라이브러리: 이벤트 PHP8.0의 이벤트 처리 라이브러리: 이벤트 May 14, 2023 pm 05:40 PM

PHP8.0의 이벤트 처리 라이브러리: 이벤트 인터넷의 지속적인 발전과 함께 널리 사용되는 백엔드 프로그래밍 언어인 PHP는 다양한 웹 애플리케이션 개발에 널리 사용됩니다. 이 과정에서 이벤트 중심 메커니즘은 매우 중요한 부분이 되었습니다. PHP8.0의 이벤트 처리 라이브러리 Event는 보다 효율적이고 유연한 이벤트 처리 방법을 제공합니다. 이벤트 처리란 무엇입니까? 이벤트 처리는 웹 애플리케이션 개발에 있어 매우 중요한 개념입니다. 이벤트는 모든 종류의 사용자 행일 수 있습니다.

VUE3 시작하기 예: 간단한 비디오 플레이어 만들기 VUE3 시작하기 예: 간단한 비디오 플레이어 만들기 Jun 15, 2023 pm 09:42 PM

새로운 세대의 프런트엔드 프레임워크가 계속 등장함에 따라 VUE3는 빠르고 유연하며 사용하기 쉬운 프런트엔드 프레임워크로 사랑받고 있습니다. 다음으로 VUE3의 기본을 배우고 간단한 동영상 플레이어를 만들어 보겠습니다. 1. VUE3 설치 먼저 VUE3를 로컬에 설치해야 합니다. 명령줄 도구를 열고 다음 명령을 실행합니다. npminstallvue@next 그런 다음 새 HTML 파일을 만들고 VUE3을 도입합니다. &lt;!doctypehtml&gt;

Golang의 포인터 변환 모범 사례를 알아보세요. Golang의 포인터 변환 모범 사례를 알아보세요. Feb 24, 2024 pm 03:51 PM

Golang은 다양한 애플리케이션과 서비스를 개발하는 데 사용할 수 있는 강력하고 효율적인 프로그래밍 언어입니다. Golang에서 포인터는 데이터를 보다 유연하고 효율적으로 운영하는 데 도움이 되는 매우 중요한 개념입니다. 포인터 변환은 다양한 유형 간의 포인터 작업 프로세스를 나타냅니다. 이 기사에서는 특정 예제를 사용하여 Golang의 포인터 변환 모범 사례를 학습합니다. 1. 기본 개념 Golang에서 각 변수에는 주소가 있으며, 주소는 메모리에서 변수의 위치입니다.

PHP 간단한 웹 크롤러 개발 예제 PHP 간단한 웹 크롤러 개발 예제 Jun 13, 2023 pm 06:54 PM

인터넷의 급속한 발전으로 인해 데이터는 오늘날 정보화 시대의 가장 중요한 자원 중 하나가 되었습니다. 웹 크롤러는 네트워크 데이터를 자동으로 획득하고 처리하는 기술로 점점 더 많은 관심과 활용을 불러일으키고 있습니다. 이 기사에서는 PHP를 사용하여 간단한 웹 크롤러를 개발하고 네트워크 데이터를 자동으로 가져오는 기능을 구현하는 방법을 소개합니다. 1. 웹 크롤러 개요 웹 크롤러는 네트워크 자원을 자동으로 획득하고 처리하는 기술로, 주요 작업 프로세스는 브라우저 동작을 시뮬레이션하고 지정된 URL 주소에 자동으로 액세스하여 모든 정보를 추출하는 것입니다.

Python의 VAE 알고리즘 예 Python의 VAE 알고리즘 예 Jun 11, 2023 pm 07:58 PM

VAE는 생성 모델이며 전체 이름은 VariationalAutoencoder이며 중국어로 Variational Autoencoder로 번역됩니다. 이미지, 오디오, 텍스트 등과 같은 새로운 데이터를 생성하는 데 사용할 수 있는 비지도 학습 알고리즘입니다. 일반 자동 인코더에 비해 VAE는 더 유연하고 강력하며 더 복잡하고 현실적인 데이터를 생성할 수 있습니다. Python은 가장 널리 사용되는 프로그래밍 언어 중 하나이며 딥 러닝을 위한 주요 도구 중 하나입니다. Python에는 우수한 기계 학습과 심층적인 기능이 많이 있습니다.

Oracle 인스턴스 수와 데이터베이스 성능 간의 관계 Oracle 인스턴스 수와 데이터베이스 성능 간의 관계 Mar 08, 2024 am 09:27 AM

Oracle 인스턴스 수와 데이터베이스 성능 간의 관계 Oracle 데이터베이스는 업계에서 잘 알려진 관계형 데이터베이스 관리 시스템 중 하나이며 엔터프라이즈 수준의 데이터 저장 및 관리에 널리 사용됩니다. Oracle 데이터베이스에서 인스턴스는 매우 중요한 개념입니다. 인스턴스는 메모리 내 Oracle 데이터베이스가 실행되는 환경을 의미합니다. 각 인스턴스는 사용자 요청을 처리하고 데이터베이스 작업을 관리하는 데 사용되는 독립적인 메모리 구조와 백그라운드 프로세스를 갖습니다. 인스턴스 수는 Oracle 데이터베이스의 성능과 안정성에 중요한 영향을 미칩니다.

See all articles