Rumah pembangunan bahagian belakang tutorial php Laravel 的 Events 及 Observers(五)

Laravel 的 Events 及 Observers(五)

Jun 20, 2016 pm 12:30 PM

首先,我们为你展示如何通过模型观察者实现前面模式事件中的第一个例子。

在 app/Observers文件夹中创建  WelcomeUserObserver.php文件,并加入下面的代码:

<?php  namespace App\Observers;  class WelcomeUserObserver {    public function created($user){      Mail::send('emails.welcome', ['user' => $user], function($message) use ($user)      {          $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('Welcome to My Awesome App, '.$user->first_name.'!');      });    }  }
Salin selepas log masuk

然后在 EventServiceProvider的 boot()方法中注册该观察者:

/**   * Register any other events for your application.   *   * @param  \Illuminate\Contracts\Events\Dispatcher  $events   * @return void   */  public function boot(DispatcherContract $events)  {      parent::boot($events);      User::observe(new WelcomeUserObserver);  }
Salin selepas log masuk

这样就 OK 了!现在你的观察者已经与模型关联起来了。

下面我们假设另一种情况。图书管理员对代码提出了一些新的需求:

  • 当添加一个新的作者的时候,每一个用户都收到一条通知
  • 每次添加/删除作者的时候,都发送一封邮件
  • 最后,每次删除一本书的时候,图书管理员都要知道数据库中有多少作者是没有与相关的图书的

好了,下面我们就开始吧。我们需要三个单独的类(请记住我们的 单一职责原则): CustomerNewAuthorObserver、 LibrarianAuthorObserver、 AuthorsWithoutBooksObservers。

注意:你可以按自己喜欢的方式命名这些类,我们这里只是选择比较容易与所选行为关联起来的名称。

下面我们分别来创建三个类:

<?php  // file: app/Observers/CustomerNewAuthorObserver  namespace App\Observers;  class CustomerNewAuthorObserver {    public function created($author)    {    }  }<?php  // file: app/Observers/LibrarianAuthorObserver  namespace App\Observers;  class LibrarianAuthorObserver {    public function created($author)    {    }    public function deleted($author)    {    }  }<?php  // file: app/Observers/AuthorsWithoutBooksObservers  namespace App\Observers;  class AuthorsWithoutBooksObservers {    public function deleted($author)    {    }  }
Salin selepas log masuk

好了,现在应该添加一些逻辑了,首先为 CustomerNewAuthorObserver添加:

<?php  // file: app/Observers/CustomerNewAuthorObserver  namespace App\Observers;  class CustomerNewAuthorObserver {    public function created($author)    {      // getting all users...      $users = \App\User::all();      foreach($users as $user)      {        Mail::send('emails.created_author_customer', ['author' => $author], function($message) use ($user)        {            $message->to($user->email, $user->first_name . ' ' . $user->last_name)->subject('New Author Added!');        });      }    }  }
Salin selepas log masuk

注意:我知道这是一种非常简单粗暴的方法,这里只是为了实现上面的目的。实际情况中可以使用 邮件队列。

<?php  // file: app/Observers/LibrarianAuthorObserver  namespace App\Observers;  class LibrarianAuthorObserver {    public function created($author) {      Mail::send('emails.created_author_librarian', ['author' => $author], function($message) use ($author)      {          $message->to('librarian@awesomelibrary.com', 'The Librarian')->subject('New Author: ' . $author->first_name . ' ' . $author->last_name);      });    }    public function deleted($author) {      Mail::send('emails.deleted_author_librarian', ['author' => $author], function($message) use ($author)      {          $message->to('librarian@awesomelibrary.com', 'The Librarian')->subject('New Author: ' . $author->first_name . ' ' . $author->last_name);      });    }  }
Salin selepas log masuk

最后:

<?php  // file: app/Observers/AuthorsWithoutBooksObservers  namespace App\Observers;  class AuthorsWithoutBooksObservers {    public function deleted($author) {      $authorsWithoutBooks = \App\Author::has('books', '=', 0)->get();      if(count($authorsWithoutBooks) > 0){        Mail::send('emails.author_without_books_librarian', ['authorsWithoutBooks' => $authorsWithoutBooks], function($message)        {            $message->to('librarian@awesomelibrary.com', 'The Librarian')->subject('Authors without Books! A check is required!');        });      }    }  }
Salin selepas log masuk

注意:就像前面提过的,我们假定你已经了解了 Laravel 发送邮件的基本知识,没有的话可以到官网学习下相关知识。

到这里并没有结束。你可以在大量的案例和场景中使用 Laravel 的模型事件和模型观察者。举个例子,假设你写博客,你希望每次发布一篇新文章或者更新一篇原有文章的时候,都更新一些站点地图,这时就可以用到观察者。再比如,当添加新书的时候,记录一些东西,也可以用到观察者。

该篇属于专题:《 Laravel 的 Events(事件) 及 Observers(观察者)》

  • 下一篇:《 Laravel 的 Events 及 Observers(六) — 总结》
  • 上一篇:《 Laravel 的 Events 及 Observers(四) — 模型观察者》
Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terangkan konsep pengikatan statik lewat dalam PHP. Terangkan konsep pengikatan statik lewat dalam PHP. Mar 21, 2025 pm 01:33 PM

Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Bagaimana cara debug mod CLI dalam phpstorm? Bagaimana cara debug mod CLI dalam phpstorm? Apr 01, 2025 pm 02:57 PM

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

See all articles