Rumah >pembangunan bahagian belakang >tutorial php >Petua Pantas: Keajaiban pemerhati yang fasih
pemerhati model fasih: mengendalikan peristiwa model dengan anggun di Laravel
Jika anda telah menggunakan fasih dalam projek sederhana dan besar sebelum ini, anda mungkin menghadapi situasi di mana anda perlu mengambil tindakan apabila model berubah. Eloquent menyediakan cara yang mudah untuk melakukan ini.
Dalam contoh kami, model fasih dapat memaklumkan kepada kami tentang perubahan mengenai model yang diberikan.corak pemerhati adalah corak reka bentuk perisian di mana objek (dipanggil subjek) mengekalkan senarai kebergantungannya (dipanggil pemerhati) dan secara automatik memberitahu mereka apabila mana -mana keadaan berubah, biasanya melalui salah satu kaedah yang memanggil mereka. - Wikipedia
peristiwa model
status model: , , creating
, created
, updating
, updated
, deleting
, deleted
, saving
, saved
, restoring
, 🎜>, restored
,
Perhatikan perbezaan antara "ing/ed":
creating
created
Fasih juga mencetuskan peristiwa serupa yang dapat kita dengar . Contoh berikut melampirkan pendengar ke peristiwa Member
model creating
.
<code class="language-php">Event::listen("eloquent.creating: App\Member", function(Member $member) { // 执行某些操作 });</code>
mari kita mulakan dengan membuat kelas baru di bawah ruang nama App\Observers
dan mula menentukan kaedah kami.
<code class="language-php">// app/Observers/MemberObserver.php namespace App\Observers; use App\Member; class MemberObserver { public function deleting(Member $member) { // 执行某些操作 } }</code>
kita boleh menggunakan nama acara sebagai nama setiap kaedah. Kami tidak perlu menentukan semua kaedah, kami hanya menentukan kaedah yang kami mahu gunakan.
Setiap ahli boleh melanggan pelbagai perkhidmatan, masing -masing mengandungi banyak ahli. Mari kita anggap kita tidak menetapkan penghapusan cascading untuk jadual yang berkaitan, kita perlu memadamkan perkhidmatan yang berkaitan apabila ahli dipadam untuk mengelakkan kesilapan apabila mengakses ahli perkhidmatan yang dilanggan. members_services
<code class="language-php">// app/Observers/MemberObserver.php namespace App\Observers; use App\Member; class MemberObserver { public function deleting(Member $member) { $member->services()->delete(); } }</code>Sekarang, langkah terakhir adalah melampirkan pemerhati ini kepada model yang sepadan. Kita boleh melakukan ini di mana sahaja yang kita mahu, tetapi penempatan sebenar berada di dalam kaedah
dalam fail app\Providers\AppProvider.php
. boot
<code class="language-php">class AppServiceProvider extends ServiceProvider { /** * 引导任何应用程序服务。 * * @return void */ public function boot() { Member::observe(MemberObserver::class); // 使用类名注册观察者 } }</code>Saya tahu contoh pemadaman cascading adalah mudah dan boleh dilakukan di pengawal atau secara langsung melalui MySQL, tetapi ini hanya bukti konsep.
Kelebihan pemerhati yang fasih adalah bahawa kita dapat membatalkan operasi semasa dengan mengembalikan nilai
dari kaedah panggil balik:
false
<code class="language-php">class MemberObserver { public function deleting(Member $member) { $member->deleted_at = Carbon::now(); $member->save(); return false; } }</code>untuk membatalkan operasi penghapusan sebenar.
Eloquent mempunyai banyak ciri tersembunyi, dan ini adalah salah satu daripada mereka. Anda akan melihat ini digunakan secara meluas dalam aplikasi besar dan dalam CMS. Jika anda mempunyai sebarang pertanyaan atau komen mengenai fasih, pastikan anda menyiarkan di bawah!
Pemerhati yang fasih di Laravel digunakan untuk memproses logik perniagaan yang perlu berlaku sebelum atau selepas operasi pangkalan data tertentu, seperti membuat, mengemas kini, memadam, atau memulihkan contoh model. Mereka menyediakan cara yang mudah dan teratur untuk menguruskan acara -acara ini daripada menyebarkannya sepanjang aplikasi. Ini menjadikan kod anda lebih ringkas, lebih mudah untuk mengurus dan mengekalkan.
Untuk membuat pemerhati yang fasih di Laravel, anda perlu membuat kelas pemerhati. Kelas ini akan mengandungi kaedah yang menunjukkan peristiwa fasih yang anda mahu cangkuk. Setiap kaedah ini menerima model sebagai parameter uniknya. Laravel tidak mengandungi arahan untuk menjana pemerhati, jadi anda perlu membuat kelas ini secara manual dalam direktori app/Observers
anda.
Selepas membuat kelas pemerhati, anda perlu mendaftarkannya kepada model yang harus diperhatikan. Ini biasanya dilakukan dalam salah satu kaedah penyedia perkhidmatan anda. Dalam kaedah ini, anda harus memanggil kaedah boot
pada model yang anda ingin perhatikan dan lulus dalam nama kelas pemerhati. observe
Apakah peristiwa fasih yang boleh saya perhatikan?
, retrieved
, creating
, created
, updating
, updated
, saving
, saved
, deleting
, deleted
, restoring
, restored
,
false
Bolehkah saya menghentikan peristiwa yang fasih daripada menyebarkan di kalangan pemerhati?
pemerhati yang fasih boleh digunakan untuk mengesahkan dengan mendengar peristiwa creating
atau updating
. Dalam kaedah pemerhati peristiwa ini, anda boleh melakukan apa -apa pemeriksaan pengesahan yang diperlukan. Sekiranya pengesahan gagal, anda boleh kembali false
untuk mengelakkan model daripada disimpan.
Ya, pemerhati fasih boleh digunakan dengan padam lembut. Peristiwa restoring
dicetuskan apabila model padam lembut pulih. Begitu juga, apabila model dipadamkan dengan lembut, peristiwa restored
dipicu, dan apabila model dipadamkan dengan lembut, acara deleting
dicetuskan. deleted
pada model. Kaedah ini mengembalikan nilai asal sifat model, yang membolehkan anda membandingkannya dengan nilai semasa model. getOriginal
, created
dan updated
dan kemudian merekodkan perubahan dalam kaedah pemerhati peristiwa -peristiwa ini. Ini sangat berguna untuk tujuan audit atau untuk aplikasi debug. deleted
Atas ialah kandungan terperinci Petua Pantas: Keajaiban pemerhati yang fasih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!