Laravel5.2にNotificationでNotificationを使う

Laravel5.3がリリースされましたが、あえてLaravel5.2でNotificationを使う話です。

環境

  • Laravel5.2(または5.1)

Notificationをインストール

Notificationとはナンゾヤ?

Laravel.com - Notificaions Laravel Notification Channel

Laravel5.3以前では通知の管理などはEventとListenerを活用することで何とかゴニョゴニョやっていたかと思います。

それがNotificationによって、より便利に通知管理を行えるようになりました。 ※名前の通り、通知に特化したものなのでEventやListenerの"代用"というわけではないかと思います。

ではでは、インストールします。 composer require laravel-notification-channels/backport

Laravel5.3の場合はデフォルトで組み込まれているため、composerでわざわざインストールする必要はありませんが、〜5.2はマニュアルです。

なのでfacadeを使いたい場合はfacadeのクラスを追加してあげます。

※FacadeでNotification使わないよーという場合は飛ばしてください。

vendor/laravel/framework/src/Illuminate/Support/FacedesにNotification.phpを作成して、以下を記述。

それから、app.phpのprovidersとaliasに以下をそれぞれ追記。

Illuminate\Notifications\NotificationServiceProvider::class 'Notification' => Illuminate\Support\Facades\Notification::class

ここまでで下準備OKです。

使ってみる

まずは通知クラスを職人さんで作成しましょう。 例としてユーザーが登録されたときの通知を管理するクラスを作成することにします。

php aritsan make:notification UserRegistered

Notificationディレクトリが自動生成されて、その中にUserRegistered.phpが生成されていると思います。

生成を確認したら、通知の際に利用したいモデルに名前空間を追加します。 ここではUser.phpを使用することにします。

User.php use Illuminate\Notifications\Notifiable;

クラスに以下を追加。 use Notifiable;

参考までに↓

先ほど生成したUserRegistered.phpのtoMailメソッド内をいじります。いじらなくともデフォルトのメールテンプレートが送信できますので飛ばしてもOKです。

メソッドについてはNotificationのAPIをご覧ください。

メールテンプレート参考

SimpleMessageとかいう仕様に従った形なのですが、ちょっとだけわかりづらい気がするでござる。

ここまで完了したら後はコントローラで通知クラスを呼び出すだけです。 名前空間とFacedeを使って呼び出すことにします。Facedeを使わない場合はドキュメントをご参考に。

HogehogeController.php

こんな感じでNotificationを使うことができます。 便利さが伝わったでしょうか・・・?

EventとListenerでSubscriberを使ってゴニョゴニョするよりは遥かに楽になったと思います。 通知だけならNotificationを利用した方が便利そうですね_(:3」∠)_

ついでにElixirをバージョンアップ

package.jsonに以下を追記、または書き換え。

npm install

どのバージョンからかは失念しましたが、おそらくlaravel5.3からbrowerifyの扱いが変わるようで、個別にインストールしてあげないとbrowserifyを使えないそうです。 laravel-elixirだけアップデートしてgulp走らせるとbrowerifyのタスクがある場合は怒られるので直ぐに気づくとは思いますが。。。

参考

Laravel.com - Notificaions Laravel Notification Channel