Laravel のイベントとオブザーバー(5)

WBOY
リリース: 2016-06-20 12:30:17
オリジナル
975 人が閲覧しました

まず、モデル オブザーバーを介して前のパターン イベントの最初の例を実装する方法を示します。

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);  }
ログイン後にコピー

大丈夫です!これで、オブザーバーがモデルに関連付けられました。

以下に別の状況を想定してみましょう。図書館員はコードに対していくつかの新しい要求を行いました:

  • 新しい著者が追加されるとすべてのユーザーが通知を受け取ります
  • 著者が追加/削除されるたびに
  • 最後に、本が削除されるたびに、図書館員は、データベース内に関連書籍がない著者が何人いるかを知る必要があります。

それでは、始めましょう。 CustomerNewAuthorObserver、LibrarianAuthorObserver、AuthorsWithoutBooksObservers の 3 つの別個のクラスが必要です (単一責任の原則 を思い出してください)。

注: これらのクラスには任意の名前を付けることができますが、選択した動作と関連付けやすい名前を選択するだけです。

それぞれ 3 つのクラスを作成しましょう:

<?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 のイベント (イベント) とオブザーバー (オブザーバー)」

  • 次の記事: 「Laravel のイベントとオブザーバー (6) —」まとめ》
  • 前回の記事:「Laravelのイベントとオブザーバー(4) - モデルオブザーバー」
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート