メサイア・ワークス

laravel5.1のサービスプロバイダについて調べてみた(カスタムバリデーターをサービスプロバイダで実装しようとしたけど、上手くいかなかったのでデフォルトのapp/Providers/AppServiceProvider.phpに記述した)

laravel5.1のサービスプロバイダについて調べてみた(カスタムバリデーターをサービスプロバイダで実装しようとしたけど、上手くいかなかったのでデフォルトのapp/Providers/AppServiceProvider.phpに記述した)

質問その1、そもそも、サービスプロバイダって何?
回答その1、一言でいうとクラスです(必ずServiceProviderクラスを継承する)。何らかに機能(サービス)を提供してくれるので、この名称らしい。

質問その2、ただのクラスとは、何が違うのか?
回答その2、laravelの機能はサービス・プロバイダー単位でまとまっているので、laravelに機能追加したい場合には同じ形式にする必要がある!(ライブラリーや関数と同じ考え方)

質問その3、具体的に、どうやって作るのか?
回答その3、コマンドラインから、例によってartisanで作る

php artisan make:provider 好きな名前ServiceProvider
具体例)
php artisan make:provider PasswordValidateServiceProvider

質問その4、app/Providers/PasswordValidateServiceProvider.phpが生成されたけど、この後はどうすれば…。
回答その4、laravelで使えるように登録する! config/app.phpに登録しないと、プロジェクトに追加しても利用出来ない!

質問その5、クラス内に、registerとbootという2種類のメソッドがあるけど、何?
回答その5、どちらも初期化処理。registerメソッドは必須。bootメソッドはオプションなので、実は無くてもOK。register -> bootの順で実行される。

質問その6、具体的に、何を記述すればいいのか?
回答その6、基本的には各サービスの初期化処理を行う。例えばカスタムバリデーター(入力チェック)は、以下の様な感じ。

上記のカスタムバリデーターの実装クラス(appフォルダ直下に自分で作る)

質問その7、エラーメッセージは、どこに記述すればいいのか?
回答その7、エラーメッセージは、resource/lang/ja/validation.phpで定義する(無くても動作はする)

質問その8、実際に使うには?
回答その8、標準のvalidateの指定と全く同じ。

質問その9、Method [validateJpZipCode] does not exist.とか、そんなvalidate無いよ!ってエラーが出るんだけど…。
回答その9、ここでつまづいた…。config/app.phpが上手く登録されていない?
最初からある、app/Providers/AppServiceProviderのbootに記述したら上手くいったので、とりあえずこれで実装する!


全体的な流れ

config/app.phpに登録→PasswordValidateServiceProvider->regbootister()で、CustomValidatorクラスが読み込まれる(ここで、ようやくvalidateJpZipCodeというカスタムバリデーターが登場!)
実際には、上記だと上手くいかなかったのでデフォルトのapp/Providers/AppServiceProvider.phpを利用した
※独自サービスプロバイダを作らなくていいので楽だけど、処理が多くなったら分割すべき

参考URL:Laravel4, 5 カスタムバリデートの実装

モバイルバージョンを終了