ThinkPHP6.0: 이벤트 시스템과 쿼리 이벤트 및 모델 이벤트의 사용
최신 버전 6.0에서는 버전 5.1의 동작을 대체하기 위해 새로운 이벤트 시스템이 도입되었으며 데이터베이스 이벤트 및 모델 이벤트도 인수했습니다.
이 글에서는 주로 새 버전의 이벤트 시스템과 쿼리 이벤트 및 모델 이벤트의 사용에 대해 설명합니다.
이벤트 정의
이벤트 시스템의 모든 작업은 thinkfacadeEvent 클래스를 통해 정적으로 호출됩니다.
이벤트 시스템은 관찰자 패턴을 사용하여 애플리케이션을 분리하는 더 나은 방법을 제공합니다. 이벤트를 수신해야 하는 경우 다음 코드를 추가하세요.
Event::trigger('UserLogin');
또는 도우미 함수
event('UserLogin');
를 사용하세요. 여기서 UserLogin은 이벤트 식별자를 나타냅니다. 별도의 이벤트 클래스를 정의하는 경우 이벤트 클래스 이름을 사용하거나 전달할 수도 있습니다. Event 클래스 인스턴스.
event('app\event\UserLogin');
이벤트 클래스는 명령줄을 통해 빠르게 생성할 수 있습니다.
php think make:event UserLogin
appeventUserLogin 이벤트 클래스는 기본적으로 생성되거나 전체 클래스 이름을 지정하여 생성할 수 있습니다.
이벤트 클래스에 메소드를 추가할 수 있습니다
namespace app\event; use app\model\User; class UserLogin { public $user; public function __construct(User $user) { $this->user = $user; } }
일반 이벤트 클래스는 다른 클래스를 상속할 필요가 없습니다.
이벤트 식별자
Event::bind('UserLogin', 'app\event\UserLogin');
를 이벤트 클래스에 바인딩하거나 애플리케이션의 event.php 이벤트 정의 파일에서 일괄적으로 바인딩할 수 있습니다.
return [ 'bind' => [ 'UserLogin' => 'app\event\UserLogin', // 更多事件绑定 ], ];
이벤트 클래스를 정의하지 않으면 바인딩할 필요가 없습니다.
ThinkPHP의 이벤트 시스템은 이벤트 클래스에 의존하지 않으며, 추가적인 요구 사항이 없으면 이벤트 식별을 통해서만 사용할 수 있습니다.
이벤트 메소드에 이벤트 매개변수를 전달할 수 있습니다
event('UserLogin', $user);
이벤트 모니터링
이벤트 모니터링을 수동으로 등록
Event::listen('UserLogin', function($user) { // });
하거나 모니터링 클래스를 사용할 수 있습니다
Event::listen('UserLogin', 'app\listener\UserLogin');
를 통해 이벤트 모니터링 클래스를 빠르게 생성할 수 있습니다. 명령줄
php think make:listener UserLogin
기본적으로 applistenerUserLogin 이벤트 수신 클래스가 생성됩니다. 생성할 전체 클래스 이름을 지정할 수도 있습니다.
이벤트 청취 클래스는 핸들러 메소드만 정의하면 되며 종속성 주입을 지원합니다.
<?php namespace app\listener; class UserLogin { public function handle($user) { // 事件监听处理 } }
핸들러 메소드에 false가 반환되면 모니터링이 종료되며, 이벤트 이후 모니터링은 더 이상 수행되지 않는다는 의미입니다.
일반적으로 해당 이벤트의 모니터링을 이벤트 정의 파일에서 직접 정의하는 것이 좋습니다.
return [ 'bind' => [ 'UserLogin' => 'app\event\UserLogin', // 更多事件绑定 ], 'listen' => [ 'UserLogin' => ['\app\listener\UserLogin'], // 更多事件监听 ], ];
이벤트 구독
이벤트 구독 메커니즘을 통해 하나의 리스너에서 여러 이벤트를 들을 수 있습니다. 예를 들어 명령줄을 통해 이벤트 구독자 클래스를 생성하면 appsubscribeUser 클래스가 기본적으로 생성됩니다. 전체 클래스 이름 생성을 지정할 수 있습니다.
그런 다음 이벤트 구독 클래스에 다양한 이벤트에 대한 청취 메소드를 추가할 수 있습니다. 예:
php think make:subscribe User
이벤트를 청취하는 메소드의 명명 규칙은 on+이벤트 식별자(카멜 표기법 명명)이며 이벤트 구독을 등록합니다
<?php namespace app\subscribe; class User { public function onUserLogin($user) { // 事件响应处理 } public function onUserLogout($user) { // 事件响应处理 } }
일반적으로 이벤트
Event::subscribe('app\subscribe\User');
는 정의 파일에 정의되는 것이 좋습니다. 내장 시스템 이벤트에는 다음이 포함됩니다.
5.1의 원래 동작 태그 중 일부는 폐기되었으며 취소된 모든 태그는 더 나은 미들웨어로 대체될 수 있습니다. 미들웨어는 요청 처리 및 출력 응답과 관련된 특수 이벤트로 생각할 수 있습니다. 실제로 미들웨어의 핸들 메소드에는 특수한 매개변수와 반환값만 있습니다.쿼리 이벤트
데이터베이스 작업의 콜백은 데이터베이스의 CURD 작업을 위해 설계된 콜백 메서드입니다.
다음 방법을 사용하여 데이터베이스 쿼리 이벤트를 등록하세요.
return [ 'bind' => [ 'UserLogin' => 'app\event\UserLogin', // 更多事件绑定 ], 'listen' => [ 'UserLogin' => ['\app\listener\UserLogin'], // 更多事件监听 ], 'subscribe' => [ '\app\subscribe\User', // 更多事件订阅 ], ];
쿼리 이벤트에는 현재 쿼리 객체라는 하나의 메서드 매개변수만 있습니다. 하지만 종속성 주입을 통해 추가 매개변수를 추가할 수 있습니다.
모델 이벤트
모델 이벤트는 모델을 쿼리하고 작성할 때 트리거되는 작업 동작을 나타냅니다.
모델 이벤트는 모델 메서드를 호출할 때만 적용됩니다. 쿼리 생성자 작업을 사용하는 것은 유효하지 않습니다.
모델은 다음 이벤트를 지원합니다.
등록된 콜백 메서드는 하나의 매개변수(현재 모델 객체 인스턴스) 전달을 지원하지만 종속성 주입을 통해 추가 매개변수 추가를 지원합니다.
before_write, before_insert, before_update, before_delete 이벤트 메소드가 false를 반환하거나 thinkException을 발생시키는 경우
ModelEventException异常的话,则不会继续执行后续的操作。
模型事件定义
最简单的方式是在模型类里面定义静态方法来定义模型的相关事件响应。
<?php namespace app\index\model; use think\Model; use app\index\model\Profile; class User extends Model { public static function onBeforeUpdate($user) { if ('thinkphp' == $user->name) { return false; } } public static function onAfterDelete($user) { Profile::destroy($user->id); } }
参数是当前的模型对象实例,支持使用依赖注入传入更多的参数。
模型事件观察者
如果希望模型的事件单独管理,可以给模型注册一个事件观察者,例如:
<?php namespace app\index\model; use think\Model; class User extends Model { protected $observerClass = 'app\index\observer\User'; }
User观察者类定义如下:
<?php namespace app\index\observer; use app\index\model\Profile; class User { public function onBeforeUpdate($user) { if ('thinkphp' == $user->name) { return false; } } public function onAfterDelete($user) { Profile::destroy($user->id); } }
观察者类的事件响应方法的第一个参数就是模型对象实例,你依然可以通过依赖注入传入其它的对象参数。
PHP中文网,大量的免费ThinkPHP入门教程,欢迎在线学习!
本文转自:https://blog.thinkphp.cn/1037387
위 내용은 ThinkPHP6.0: 이벤트 시스템과 쿼리 이벤트 및 모델 이벤트의 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











이 기사는 서버리스 아키텍처에서 ThinkPHP를 사용하기위한 주요 고려 사항에 대해 설명하고 성능 최적화, 무국적 설계 및 보안에 중점을 둡니다. 비용 효율성 및 확장 성과 같은 혜택을 강조하고 도전 과제를 해결합니다.

ThinkPhp의 IOC 컨테이너는 PHP apps.character 수 : 159의 효율적인 종속성 관리를위한 게으른 하중, 맥락 바인딩 및 메소드 주입과 같은 고급 기능을 제공합니다.

이 기사는 ThinkPhp의 내장 테스트 프레임 워크에 대해 논의하여 장치 및 통합 테스트와 같은 주요 기능과 조기 버그 감지 및 개선 된 코드 품질을 통해 응용 프로그램 신뢰성을 향상시키는 방법을 강조합니다.

이 기사에서는 ThinkPHP 마이크로 서비스에서 서비스 검색 및로드 밸런싱 구현, 설정, 모범 사례, 통합 방법 및 권장 도구에 중점을 둡니다. [159 문자]

이 기사는 설치, 구성, 작업 관리 및 확장성에 중점을 둔 ThinkPhp 및 RabbitMQ를 사용하여 분산 작업 큐 시스템을 구축합니다. 주요 문제는 고 가용성 보장, 손상과 같은 일반적인 함정을 피하는 것입니다.

이 기사는 파일 업로드를 처리하고 ThinkPhP의 클라우드 스토리지를 통합하여 보안, 효율성 및 확장 성을 중심으로하는 모범 사례에 대해 설명합니다.

기사는 실시간 주식 시장 데이터 피드에 ThinkPHP를 사용하여 설정, 데이터 정확도, 최적화 및 보안 측정에 중점을 둡니다.

이 기사는 ThinkPhp를 사용하여 실시간 협업 도구를 구축하고 설정, WebSocket 통합 및 보안 모범 사례에 중점을 둡니다.
