찾다
PHP 프레임워크ThinkPHPThinkphp 이벤트 메커니즘을 구현하는 방법

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

    1. 모니터링을 통해

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

    php를 실행합니다. make:listener

    예:

    php make:listener UserListener

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

    2. 청취 구성: appevent.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

    예:

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

    4.2 수동 바인딩

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

    php think make:event

    예:

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

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    ThinkPhp의 내장 테스트 프레임 워크의 주요 기능은 무엇입니까?ThinkPhp의 내장 테스트 프레임 워크의 주요 기능은 무엇입니까?Mar 18, 2025 pm 05:01 PM

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

    실시간 주식 시장 데이터 피드 구축에 ThinkPhp를 사용하는 방법은 무엇입니까?실시간 주식 시장 데이터 피드 구축에 ThinkPhp를 사용하는 방법은 무엇입니까?Mar 18, 2025 pm 04:57 PM

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

    서버리스 아키텍처에서 ThinkPhp를 사용하는 데있어 주요 고려 사항은 무엇입니까?서버리스 아키텍처에서 ThinkPhp를 사용하는 데있어 주요 고려 사항은 무엇입니까?Mar 18, 2025 pm 04:54 PM

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

    ThinkPHP 마이크로 서비스에서 서비스 검색 및로드 밸런싱을 구현하는 방법은 무엇입니까?ThinkPHP 마이크로 서비스에서 서비스 검색 및로드 밸런싱을 구현하는 방법은 무엇입니까?Mar 18, 2025 pm 04:51 PM

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

    ThinkPhp의 종속성 주입 컨테이너의 고급 기능은 무엇입니까?ThinkPhp의 종속성 주입 컨테이너의 고급 기능은 무엇입니까?Mar 18, 2025 pm 04:50 PM

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

    실시간 협업 도구를 구축하는 데 ThinkPhp를 사용하는 방법은 무엇입니까?실시간 협업 도구를 구축하는 데 ThinkPhp를 사용하는 방법은 무엇입니까?Mar 18, 2025 pm 04:49 PM

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

    SaaS 애플리케이션 구축에 ThinkPhp를 사용하면 어떤 주요 이점이 있습니까?SaaS 애플리케이션 구축에 ThinkPhp를 사용하면 어떤 주요 이점이 있습니까?Mar 18, 2025 pm 04:46 PM

    ThinkPhp는 가벼운 디자인, MVC 아키텍처 및 확장 성을 통해 SaaS 앱에 혜택을줍니다. 다양한 기능을 통해 확장 성을 향상시키고 개발 속도를 높이며 보안을 향상시킵니다.

    ThinkPHP 및 RabbitMQ로 분산 작업 대기열 시스템을 구축하는 방법은 무엇입니까?ThinkPHP 및 RabbitMQ로 분산 작업 대기열 시스템을 구축하는 방법은 무엇입니까?Mar 18, 2025 pm 04:45 PM

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

    See all articles

    핫 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 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

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

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    VSCode Windows 64비트 다운로드

    VSCode Windows 64비트 다운로드

    Microsoft에서 출시한 강력한 무료 IDE 편집기

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

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

    SecList

    SecList

    SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구