>  기사  >  PHP 프레임워크  >  Thinkphp 이벤트 메커니즘을 구현하는 방법

Thinkphp 이벤트 메커니즘을 구현하는 방법

PHPz
PHPz앞으로
2023-06-02 17:37:22863검색

    이벤트 메커니즘을 구현하는 방법에는 모니터링과 구독을 통한 두 가지가 있습니다.

    1. 모니터링을 통해

    1 청취 클래스 생성: 명령줄 모드에서 프레임워크 루트 디렉터리에 들어가

    php를 실행합니다. make:listener b12b8fd28545369682c06d5a713e866d

    예:

    php make:listener UserListener

    가 실행 후 32c1c95a4d54a59cb291939c5443b08aapplistener下生成UserListener 클래스에 있을 것이라고 생각하세요.

    2. 청취 구성: c9cfcba355729927e494e54a70e51e00appevent.php 파일의 청취 배열에서 다음과 같이 UserListener 클래스를 구성합니다.

    'listen' => applistenerUserListener']
    ],

    3. 청취 트리거: 청취를 트리거해야 하는 곳에 다음 코드를 추가하세요

    event('testEvent');

    참고: 여기에서 testEvent 매개변수는 마음대로 정의할 수 있는 이벤트 이름이지만 event.php와 동일 파일에 구성된 키 이름은 일관됩니다.

    모니터링을 실행할 때 두 번째 매개변수를 가져올 수 있습니다. 핸들 메소드의 매개변수인 두 번째 매개변수를 통해 UserListener 클래스에 어떤 데이터든 전달할 수 있습니다. (무엇을 의미하는지 이해하지 못하는 경우 아래 전체 코드를 통해 이해하시기 바랍니다.)

    4. 듣기 로직 처리: UserListener 클래스의 핸들 메소드에서 비즈니스 로직 완성

    전체 코드는 다음과 같습니다.

    Other: 테스트에 사용되는 클래스

    <?php
    namespace app\controller;
    class Other
    {
        public function hello()
        {
            echo &#39;hello function&#39;;
        }
    }

    Index: 듣기를 트리거하는 클래스

     

    UserListener: 이벤트 청취 클래스

    <?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();
        }
    }

    2. 구독을 통해

    1. 구독 클래스를 생성합니다

    실행하려면 명령줄 모드에서 프레임워크 루트 디렉토리를 입력하세요.

    php make:subscribe e13df1c73d146215a128c851c4f2c01a

    예:

    php think make:subscribe UserSubscribe

    실행 후 UserSubscribe 클래스는 c9cfcba355729927e494e54a70e51e00appsubscribe 아래에 생성됩니다.

    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();
        }
    }

    4.2 수동 바인딩

    먼저 처리를 담당하는 이벤트 클래스를 만듭니다. 특정 비즈니스 로직. 명령줄 모드에서 프레임워크 루트 디렉터리를 입력하고 실행합니다.

    php think make:event b12b8fd28545369682c06d5a713e866d

    예:

    php think make:event UserEvent

    실행 후 < ;The UserEvent 클래스는 프레임워크 루트 디렉터리>appevent 아래에 생성됩니다.

    그런 다음 이 클래스에 들어오는 매개변수가 있는 핸들 메서드를 정의합니다. 메소드 이름과 전달되는 매개변수 이름은 임의로 정의할 수 있습니다. 특정 비즈니스 로직은 핸들 메소드에서 처리될 수 있습니다.

    다음으로, Event 개체를 매개변수로 받아야 하는 구독 메서드를 UserSubscribe 클래스에 추가합니다. 그런 다음 이벤트 리스너를 이 함수에 있는 UserEvent 클래스의 핸들 메서드에 바인딩합니다.

    $event->listen(&#39;testEvent&#39;, [app(&#39;app\event\UserEvent&#39;), &#39;handle&#39;]);

    전체 코드는 다음과 같습니다

    Other 및 Index 클래스의 코드는 첫 번째 접근 방식과 동일합니다.

    UserSubscribe: 이벤트 구독 클래스

    UserEvent: 이벤트 처리 클래스

    <?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제