Terdapat dua cara untuk melaksanakan mekanisme acara: melalui pemantauan dan melalui langganan
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 app
pendengar下生成
UserListener akan berada dalam
2. Konfigurasikan mendengar: Konfigurasikan kelas UserListener dalam tatasusunan dengar fail
'dengar' => [
'testEvent' => ['applistenerUserListener']
],
3 Pencetus mendengar: Tambahkan kod berikut di mana anda perlu mencetuskan pendengaran
event('testEvent');
. 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 'hello function'; } }
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(); } }
php think make:subscribeContohnya:
php think make:subscribe UserSubscribeSelepas pelaksanaan, kelas UserSubscribe akan dijana di bawah
' langgan ' => ['appsubscribeUserSubscribe'],Nota: Untuk menguji kesan, padamkan UserListener yang dikonfigurasikan di atas daripada tatasusunan dengar3
4. Memproses logik pemantauan
4.1 Pengikatan 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(); } }
4.2 Pengikatan manual
Contohnya:
php think make:event UserEvent
Selepas pelaksanaan, kelas UserEvent akan dijana di bawahappevent.
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('testEvent', [app('app\event\UserEvent'), 'handle']);
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(); } }
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan mekanisme acara Thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!