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:
HttpEnd | App End Tag bit | |
---|---|---|
LogWrite | Log menulis kaedah teg bit | Maklumat log yang ditulis semasa |
LogTulis teg | Log jenis tulis teg | Maklumat log tatasusunan |
RouteLoaded | Pemuatan laluan selesai | |
Takrif acara AppInit mesti ditakrifkan dalam fail definisi acara global, acara lain boleh ditakrifkan dalam fail definisi acara aplikasi. | ||
Panggil balik operasi pangkalan data juga dipanggil acara pertanyaan Ia adalah kaedah panggil balik yang direka untuk operasi CURD pangkalan data Ia terutamanya termasuk: | ||
Event | Event | Event |
e
.
< kod>pilihPanggil balik pra-pertanyaan
before_find
selepas_masukkan_selepas | |
---|---|
select 查询前回调 | |
before_find | find 查询前回调 |
after_insert | insert 操作成功后回调 |
after_update | update 操作成功后回调 |
after_delete | delete | after_delete
parameter acara pertanyaan ialah contoh objek pertanyaan semasa.
cangkuk | |
selepas_baca | |
Sebelum menambah | |
selepas_masukkan | Selepas menambah |
sebelum_kemas kini | sebelum_kemas kini |
selepas_kemas kini | selepas kemas kini |
sebelum_tulis | sebelum_tulis |
sebelum pemadaman