Rumah > rangka kerja php > ThinkPHP > teks badan

Bagaimana untuk melaksanakan mekanisme acara Thinkphp

PHPz
Lepaskan: 2023-06-02 17:37:22
ke hadapan
871 orang telah melayarinya

    Terdapat dua cara untuk melaksanakan mekanisme acara: melalui pemantauan dan melalui langganan

    1 Melalui pemantauan

    1 kelas mendengar : Masukkan direktori akar rangka kerja dalam mod baris arahan dan laksanakan

    php think make:listener

    Contohnya:

    >

    php think make:listener UserListener

    Selepas pelaksanaan, kelas apppendengar下生成UserListener akan berada dalam

    2. Konfigurasikan mendengar: Konfigurasikan kelas UserListener dalam tatasusunan dengar fail appevent.php, seperti berikut:

    'dengar' => [
    'testEvent' => ['applistenerUserListener']
    ],

    3 Pencetus mendengar: Tambahkan kod berikut di mana anda perlu mencetuskan pendengaran

    event('testEvent');
    Salin selepas log masuk

    . Nota: Parameter testEvent di sini ialah nama acara dan boleh ditakrifkan sewenang-wenangnya, tetapi ia mesti konsisten dengan nama kunci yang dikonfigurasikan dalam fail event.php.

    Anda boleh membawa parameter kedua apabila mencetuskan pendengar. Anda boleh menghantar sebarang data ke kelas UserListener melalui parameter kedua, iaitu parameter kaedah pemegang (jika anda tidak faham maksudnya, sila fahami dengan kod lengkap di bawah).

    4 Proses logik mendengar: Lengkapkan logik perniagaan dalam kaedah pemegang kelas UserListener

    Kod lengkap adalah seperti berikut

    Lain-lain: kelas untuk ujian

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

    Indeks: Kelas yang mencetuskan pendengaran

    Salin selepas log masuk

    UserListener: Kelas mendengar acara

    <?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();
        }
    }
    Salin selepas log masuk

    2 Dengan melanggan

    1

    dalam arahan Masukkan direktori akar rangka kerja dalam mod baris dan laksanakan

    php think make:subscribe

    Contohnya:

    php think make:subscribe UserSubscribe

    Selepas pelaksanaan, kelas UserSubscribe akan dijana di bawah appsubscribe.

    2. Konfigurasikan pemantauan

    Konfigurasikan kelas UserSubscribe dalam tatasusunan langganan fail "direktori akar rangka kerja" appevent.php, seperti berikut:

    ' langgan ' => ['appsubscribeUserSubscribe'],

    Nota: Untuk menguji kesan, padamkan UserListener yang dikonfigurasikan di atas daripada tatasusunan dengar

    3

    Sama seperti kaedah pertama

    4. Memproses logik pemantauan

    Terdapat dua kaedah untuk memproses logik pemantauan, yang saya panggil pengikatan automatik dan pengikatan manual. Pengikatan manual dan pengikatan automatik adalah saling eksklusif, anda hanya boleh memilih satu atau yang lain.

    4.1 Pengikatan automatik

    Kaedah ontestEvent yang melengkapkan logik perniagaan harus ditambahkan pada kelas UserSubscribe. Nama kaedah yang ditambahkan tidak boleh ditakrifkan sewenang-wenangnya Peraturannya adalah untuk menambah di hadapan nama acara. Oleh kerana nama acara yang kami takrifkan dalam event.php ialah testEvent, nama kaedah ialah ontestEvent (perhatikan kesnya). Selepas kaedah mendengar ditakrifkan, ia terikat secara automatik kepada acara, jadi saya memanggilnya mengikat automatik.

    Kod lengkap adalah seperti berikut

    Kod kelas Lain dan Indeks adalah sama dengan pendekatan pertama

    UserSubscribe: kelas langganan acara

    <?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();
        }
    }
    Salin selepas log masuk

    4.2 Pengikatan manual

    Pertama, cipta kelas acara yang bertanggungjawab untuk mengendalikan logik perniagaan tertentu. Masukkan direktori akar rangka kerja dalam mod baris arahan dan laksanakan:

    php think make:event

    Contohnya:

    php think make:event UserEvent

    Selepas pelaksanaan, kelas UserEvent akan dijana di bawah appevent.

    Kemudian tentukan kaedah pemegang dalam kelas ini, yang mempunyai parameter masuk. Nama kaedah dan nama parameter yang diluluskan boleh ditakrifkan sewenang-wenangnya. Logik perniagaan tertentu boleh dikendalikan dalam kaedah pemegang.

    Seterusnya, tambahkan kaedah langgan dalam kelas UserSubscribe, yang perlu menerima objek Acara sebagai parameter. Seterusnya, ikat pendengar acara kepada kaedah pemegang kelas UserEvent dalam fungsi ini. Seperti berikut:

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

    Kod lengkap adalah seperti berikut

    Kod kelas lain dan Indeks adalah sama dengan pendekatan pertama

    UserSubscribe: kelas langganan acara

    Salin selepas log masuk

    UserEvent: Kelas pengendalian acara

    <?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();
        }
    }
    Salin selepas log masuk

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan mekanisme acara Thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!