Peristiwa


Bagaimana untuk menentukan acara?

Semua operasi sistem acara dipanggil secara statik melalui kelas thinkfacadeEvent

Sistem acara menggunakan corak pemerhati (rujuk kepada corak reka bentuk PHP) cara.

Di mana anda perlu mendengar acara, contohnya, di bawah kami menambah kod pencetus acara berikut selepas pengguna menyelesaikan operasi log masuk:

// 触发UserLogin事件 用于执行用户登录后的一系列操作
Event::trigger('UserLogin');


Di sini UserLogin mewakili pengecam acara Jika anda menentukan kelas acara yang berasingan, anda boleh menggunakan nama kelas acara (malah anda boleh lulus dalam contoh kelas acara).

// 直接使用事件类触发
event('app\event\UserLogin');

Kelas acara boleh dijana dengan cepat melalui baris arahan

php think make:event UserLogin

Kelas acara appeventUserLogin akan dijana secara lalai, atau anda boleh menentukan nama kelas lengkap untuk menjananya.

Kita boleh menambah kaedah pada kelas acara

namespace app\event;

use app\model\User;

class UserLogin
{
    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

Kelas acara am tidak perlu mewarisi mana-mana kelas lain.

Anda boleh mengikat pengecam acara ke kelas acara Biasanya disyorkan untuk mengikat dalam kelompok secara langsung dalam fail definisi acara acara.php aplikasi.

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
];

Jika anda memerlukan pengikatan dinamik, anda boleh menggunakan sistem acara

Event::bind(['UserLogin' => 'app\event\UserLogin']);

ThinkPHP tidak bergantung pada kelas acara Jika tiada keperluan tambahan, ia juga boleh digunakan hanya melalui pengenalan acara, menghapuskan masalah menentukan kelas acara.

Jika anda tidak menentukan kelas acara, tiada pengikatan diperlukan. Untuk kebanyakan senario, mungkin tiada keperluan untuk menentukan kelas acara.

Anda boleh lulus dalam parameter acara dalam kaedah acara

// user是当前登录用户对象实例
event('UserLogin', $user);

Dengar acara

Anda boleh mendaftar pendengar acara secara manual

Event::listen('UserLogin', function($user) {
    // 
});

atau gunakan kelas mendengar untuk melaksanakan pemantauan

Event::listen('UserLogin', 'app\listener\UserLogin');
dengan cepat menjana

melalui baris arahan Kelas mendengar acara

php think make:listener UserLogin

akan menjana kelas mendengar acara applistenerUserLogin secara lalai, atau anda boleh menentukan nama kelas lengkap untuk menjananya.

Kelas mendengar acara hanya perlu menentukan kaedah pemegang dan menyokong suntikan pergantungan.

<?php
namespace app\listener;

class UserLogin
{
    public function handle($user)
    {
        // 事件监听处理
    }   
}

Jika palsu dikembalikan dalam kaedah pemegang, bermakna pemantauan ditamatkan, dan pemantauan selepas acara tidak akan dilakukan lagi.

Secara umumnya disyorkan untuk menentukan pemantauan acara yang sepadan secara langsung dalam fail definisi acara.

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
];

Langganan acara

Anda boleh mendengar berbilang acara dalam satu pendengar melalui mekanisme langganan acara, contohnya, menjana kelas pelanggan acara melalui baris arahan,

php think make:subscribe User

Kelas appsubscribeUser akan dijana secara lalai, atau anda boleh menentukan penjanaan nama kelas penuh.

Kemudian anda boleh menambah kaedah mendengar untuk acara berbeza dalam kelas langganan acara, contohnya.

<?php
namespace app\subscribe;

class User
{
    public function onUserLogin($user)
    {
        // UserLogin事件响应处理
    }

    public function onUserLogout($user)
    {
        // UserLogout事件响应处理
    }
}

Konvensyen penamaan untuk kaedah yang mendengar acara ialah pengecam pada+acara (penamaan kes unta), dan kemudian daftarkan pelanggan acara dalam fail definisi acara.

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
    'subscribe'    =>    [
       'app\subscribe\User',
        // 更多事件订阅
    ],
];

Jika anda ingin menambah pengecam awalan acara secara seragam, anda boleh mentakrifkan atribut eventPrefix.

<?php
namespace app\subscribe;

class User
{
    protected $eventPrefix = 'User';

    public function onLogin($user)
    {
        // UserLogin事件响应处理
    }

    public function onLogout($user)
    {
        // UserLogout事件响应处理
    }
}

Jika anda ingin menyesuaikan kaedah langganan (atau spesifikasi kaedah), anda boleh menentukan pelaksanaan kaedah langganan.

<?php
namespace app\subscribe;

use think\Event;

class User
{
    public function onUserLogin($user)
    {
        // UserLogin事件响应处理
    }

    public function onUserLogout($user)
    {
        // UserLogout事件响应处理
    }

    public function subscribe(Event $event)
    {
        $event->listen('UserLogin', [$this,'onUserLogin']);
        $event->listen('UserLogout',[$this,'onUserLogout']);
    }
}

Jika anda perlu mendaftar secara dinamik, anda boleh menggunakan

Event::subscribe('app\index\subscribe\User');

acara terbina dalam

Acara sistem terbina dalam termasuk:


. bit tag permulaan pplication NoneInstance objek tindak balas semasaLog jenis tulisRouteLoadedPemuatan laluan selesaiTiada Beberapa teg gelagat asal dalam 5.1 telah ditinggalkan, dan semua teg yang dibatalkan boleh digantikan dengan yang lebih baik menggunakan perisian tengah. Middleware boleh dianggap sebagai acara khas yang berkaitan dengan memproses permintaan dan bertindak balas kepada output. Malah, kaedah pengendali middleware hanya mempunyai parameter khas dan nilai pulangan. Panggil balik operasi pangkalan data juga dipanggil acara pertanyaan Ia adalah kaedah panggil balik yang direka untuk operasi CURD pangkalan data Ia terutamanya termasuk: EventEventEvente
HttpEndApp End Tag bit
LogWriteLog menulis kaedah teg bitMaklumat log yang ditulis semasa
LogTulis tegLog jenis tulis tegMaklumat log tatasusunan
Takrif acara AppInit mesti ditakrifkan dalam fail definisi acara global, acara lain boleh ditakrifkan dalam fail definisi acara aplikasi.
e

e

.


< kod>pilihPanggil balik pra-pertanyaan

before_find

cariPanggil balik pra-pertanyaanafter_updateafter_deletepadamPanggil balik selepas operasi berjaya
selepas_masukkan_selepasmasukkan balikselepas berjaya operation
kemas kiniPanggil balik selepas operasi berjayaselect查询前回调
before_findfind查询前回调
after_insertinsert操作成功后回调
after_updateupdate操作成功后回调
after_deletedelete


parameter acara pertanyaan ialah contoh objek pertanyaan semasa.

Acara model termasuk: cangkukoperasi yang sepadancangkukoperasi sepadanselepas_bacaselepas_bacaSebelum menambahselepas_masukkanSelepas menambah sebelum_kemas kinisebelum_kemas kiniselepas_kemas kiniselepas kemas kinisebelum_tulissebelum_tulis rite


sebelum_padam


sebelum pemadaman

🎜selepas_padam🎜🎜Selepas pemadaman🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜