Laravel 的 Events 及 Observers(五)

php中文网
发布: 2016-06-20 12:30:17
原创
1068人浏览过

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

在 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.'!');      });    }  }
登录后复制

然后在 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);  }
登录后复制

这样就 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)    {    }  }
登录后复制

好了,现在应该添加一些逻辑了,首先为 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!');        });      }    }  }
登录后复制

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

<?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);      });    }  }
登录后复制

最后:

<?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!');        });      }    }  }
登录后复制

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

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

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

  • 下一篇:《 Laravel 的 Events 及 Observers(六) — 总结》
  • 上一篇:《 Laravel 的 Events 及 Observers(四) — 模型观察者》
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号