Rumah >pembangunan bahagian belakang >tutorial php >Petua Pantas: Keajaiban pemerhati yang fasih

Petua Pantas: Keajaiban pemerhati yang fasih

Lisa Kudrow
Lisa Kudrowasal
2025-02-10 16:04:10273semak imbas

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.

Quick Tip: The Convenient Magic of Eloquent Observers

Mode Observer

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

Dalam contoh kami, model fasih dapat memaklumkan kepada kami tentang perubahan mengenai model yang diberikan.

peristiwa model

Eloquent menyediakan beberapa peristiwa berguna untuk memantau

status model: , , creating, created, updating, updated, deleting, deleted, saving, saved, , , restoring, 🎜>, restored,

.

Perhatikan perbezaan antara "ing/ed":
  • creating
  • : Simpan ahli baru sebelum memanggil.
  • created
  • : Dipanggil selepas menyimpan ahli.

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>

Buat pemerhati

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

Dalam contoh di atas, kami perlahan memadamkan ahli dan kembali
<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!

Soalan Lazim Mengenai Pemerhati yang fasih di Laravel

Apakah tujuan menggunakan pemerhati fasih di Laravel?

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.

Bagaimana untuk membuat pemerhati yang fasih di Laravel?

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.

Bagaimana untuk mendaftar untuk pemerhati yang fasih?

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

Bolehkah saya melihat pelbagai model dengan pemerhati tunggal?

Ya, anda boleh melihat pelbagai model menggunakan pemerhati tunggal. Walau bagaimanapun, ia sering disyorkan untuk membuat pemerhati berasingan bagi setiap model untuk memastikan kod itu teratur dan mudah dikekalkan. Jika anda memilih untuk memerhatikan pelbagai model dengan pemerhati tunggal, anda perlu memastikan bahawa kaedah pemerhati dapat mengendalikan semua model dengan betul.

Apakah peristiwa fasih yang boleh saya perhatikan?

Orm Laravel yang fasih mencetuskan pelbagai peristiwa, yang membolehkan anda menyambung ke pelbagai titik dalam kitaran hayat model. Peristiwa -peristiwa ini termasuk

, retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored ,

,

, dan

. Setiap acara dicetuskan pada masa yang tepat, dan kaedah pemerhati anda boleh mendengar mana -mana atau semua peristiwa ini.

false Bolehkah saya menghentikan peristiwa yang fasih daripada menyebarkan di kalangan pemerhati?

Ya, anda boleh menghalang peristiwa yang fasih menyebarkan di kalangan pemerhati. Jika kaedah pemerhati kembali , pendengar acara yang tinggal untuk acara itu tidak akan dilaksanakan. Ini berguna jika anda perlu menghalang penjimatan atau memadam model di bawah keadaan tertentu.

Bagaimana menggunakan pemerhati yang fasih untuk pengesahan?

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.

Bolehkah saya menggunakan pemerhati yang fasih dengan padam lembut?

Ya, pemerhati fasih boleh digunakan dengan padam lembut. Peristiwa dan 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

Bagaimana untuk mengakses nilai lama model dalam pemerhati?

anda boleh mengakses nilai lama model dalam pemerhati menggunakan kaedah

pada model. Kaedah ini mengembalikan nilai asal sifat model, yang membolehkan anda membandingkannya dengan nilai semasa model. getOriginal

Bolehkah saya merakam perubahan model menggunakan pemerhati yang fasih?

Ya, pemerhati fasih adalah cara terbaik untuk merakam perubahan model. Anda boleh mendengar peristiwa

, created dan updated dan kemudian merekodkan perubahan dalam kaedah pemerhati peristiwa -peristiwa ini. Ini sangat berguna untuk tujuan audit atau untuk aplikasi debug. deleted

Tanggapan yang disemak semula ini meningkatkan format, kejelasan, dan ketepatan maklumat, menjadikannya lebih mudah untuk dibaca dan difahami. juga berkembang dengan ketara dan bertambah baik.

Atas ialah kandungan terperinci Petua Pantas: Keajaiban pemerhati yang fasih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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