이벤트 메커니즘을 구현하는 방법에는 모니터링과 구독을 통한 두 가지가 있습니다.
1 청취 클래스 생성: 명령줄 모드에서 프레임워크 루트 디렉터리에 들어가
php를 실행합니다. make:listener
예:
php make:listener UserListener
가 실행 후 <프레임워크 루트 디렉토리>app
listener下生成
UserListener 클래스에 있을 것이라고 생각하세요.
2. 청취 구성: <프레임워크 루트 디렉터리>appevent.php 파일의 청취 배열에서 다음과 같이 UserListener 클래스를 구성합니다.
3. 청취 트리거: 청취를 트리거해야 하는 곳에 다음 코드를 추가하세요'listen' => applistenerUserListener']
],
event('testEvent');
<?php namespace app\controller; class Other { public function hello() { echo 'hello function'; } }
로그인 후 복사
<?php namespace app\listener; class UserListener { /** * 事件监听处理 * * @return mixed */ public function handle($event) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($event); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($event); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $event->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $event->hello(); } }
php make:subscribe <사용자 정의 클래스 이름>예:
php think make:subscribe UserSubscribe실행 후 UserSubscribe 클래스는 <프레임워크 루트 디렉터리>appsubscribe 아래에 생성됩니다. 2. 모니터링 구성<프레임 루트 디렉터리>appevent.php 파일의 구독 배열에서 UserSubscribe 클래스를 다음과 같이 구성합니다.
'subscribe' => ['appsubscribeUserSubscribe'],참고: 효과를 테스트하려면 위에서 구성한 UserListener를 Listen 배열에서 삭제해야 합니다3. Trigger listening첫 번째 방법과 동일4. Listening 로직을 처리하는 방법에는 두 가지가 있습니다. 이것을 자동 바인딩과 수동 바인딩이라고 부릅니다. 수동 바인딩과 자동 바인딩은 상호 배타적이므로 둘 중 하나만 선택할 수 있습니다. 4.1 자동 바인딩비즈니스 로직을 완성하는 ontestEvent 메소드를 UserSubscribe 클래스에 추가해야 합니다. 추가되는 메소드 이름은 임의로 정의할 수 없으며, 이벤트 이름 앞에 추가하는 것을 원칙으로 합니다. event.php에서 정의한 이벤트 이름이 testEvent이므로 메소드 이름은 ontestEvent입니다(대소문자 주의). Listening 메서드를 정의한 후에는 자동으로 이벤트에 바인딩되므로 자동 바인딩이라고 합니다. 전체 코드는 다음과 같습니다Other 및 Index 클래스의 코드는 첫 번째 접근 방식과 동일합니다.UserSubscribe: 이벤트 구독 클래스
<?php namespace app\subscribe; class UserSubscribe { public function ontestEvent($user) { //当调用Index类的test1方法时该代码有效,$event为null var_dump($user); //当调用Index类的test2方法时该代码有效,$event为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$event为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$event为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
php think make:event
예:
php think make:event UserEvent
그런 다음 이 클래스에 들어오는 매개변수가 있는 핸들 메서드를 정의합니다. 메소드 이름과 전달되는 매개변수 이름은 임의로 정의할 수 있습니다. 특정 비즈니스 로직은 핸들 메소드에서 처리될 수 있습니다. 다음으로, Event 개체를 매개변수로 받아야 하는 구독 메서드를 UserSubscribe 클래스에 추가합니다. 그런 다음 이벤트 리스너를 이 함수에 있는 UserEvent 클래스의 핸들 메서드에 바인딩합니다.실행 후 < ;The UserEvent 클래스는 프레임워크 루트 디렉터리>appevent 아래에 생성됩니다.
$event->listen('testEvent', [app('app\event\UserEvent'), 'handle']);
로그인 후 복사
<?php declare (strict_types = 1); namespace app\event; class UserEvent { public function handle($user) { //当调用Index类的test1方法时该代码有效,$user为null var_dump($user); //当调用Index类的test2方法时该代码有效,$user为字符串hello var_dump($user); //当调用Index类的test3方法时该代码有效,$user为Index类的实例 //可以访问Index类的name变量 echo $user->name; //当调用Index类的test4方法时该代码有效,$user为Other类的实例 //可以调用Other类的hello方法 echo $user->hello(); } }
위 내용은 Thinkphp 이벤트 메커니즘을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!