質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

295閲覧

オリジナルバリデータクラスを利用する際にサービスプロバイダーを利用しなければならない理由

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2019/05/17 05:49

laravelを学習中なのですが、お聞きしたいことがあります。
以下のコードにおいて、オリジナルのバリデータクラスを組み込む際、何故、サービスプロバイダーを利用しなければならないのか、といった点です。
以下は、オリジナルのバリデータクラス「HelloValidator.php」です。

php

1<?php 2namespace App\Http\Validators; 3use Illuminate\Validation\Validator; 4 5class HelloValidator extends Validator 6{ 7 public function validateHello($attribute,$value,$parameters) 8 { 9 return $value % 2 == 0; 10 } 11}

以下は作成したサービスプロバイダーである、「HelloSeviceProvider.php」です。

php

1<?php 2 3namespace App\Providers; 4use Illuminate\Support\Facades\View; 5use Illuminate\Support\ServiceProvider; 6use Illuminate\Validation\Validator; 7use App\Http\Validators\HelloValidator; 8 9class HelloServiceProvider extends ServiceProvider 10{ 11 /** 12 * Register services. 13 * 14 * @return void 15 */ 16 public function register() 17 { 18 // 19 20 } 21 22 /** 23 * Bootstrap services. 24 * 25 * @return void 26 */ 27 public function boot() 28 { 29 //' 30 $validator = $this->app['validator']; 31 32 33 $validator->resolver(function($translator,$data,$rules,$messages){ 34 return new HelloValidator($translator,$data,$rules,$messages); 35 }); 36 } 37} 38

HelloValidator.phpを利用するには、作成したサービスプロバイダーである、HelloServiceProvaider.phpを利用するとあったのですが、何故、オリジナルバリデータクラスを利用する際は、サービスプロバイダーを利用しなければならないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toll_tree

2019/05/17 06:01

あーそうだったんですね。 学習資料に、オリジナルバリデータとあったので、そうではないかと思ってました
m.ts10806

2019/05/17 06:04

公式(またはそれに準ずる翻訳サイト)を飛ばしてプログラミングできると思わないでください。(フレームワークに限らず)
m.ts10806

2019/05/17 06:05

正直今回の件は「カスタムバリデータ”クラス”を作りたい」なら「それが仕様だから」以外答えようがないです。 仕様から離れたいなら自身の責任においてやってもらうしかないのです。
toll_tree

2019/05/17 06:06

いえ、公式でそのような名前がついていたのは知りませんでした。
m.ts10806

2019/05/17 06:14

それは読んでないからですよね。調べてないからですよね。 読んでいればカスタムバリデータがどういう手法で作れるか幾らでも書いてあります。 「Laravel バリデータ オリジナル」で調べてみましたか?「カスタムバリデータ」「カスタムバリデーション」という語を採用している記事のほうがどう見ても多いです。 自分がやらずに他人に調べさせる行為は非推奨です(丸投げだから) 「質問するときのヒント」にも書いてあります。 https://teratail.com/help/question-tips#questionTips1-2 >1-2. 投稿前に検索し、できるところまで自分でやってみましょう >検索して見つけたページでわからない事があれば、どのページのどの部分がわからないのかを明確に記し質問してみてください。 本質問内容だけでは「何を調べたか」「何を試したか」「自分がどこまで把握しているか」が全く分かりません。
m.ts10806

2019/05/17 06:24

1つ訂正 >「それが仕様だから」以外答えようがない 「仕様だから」というと少し正確ではないですね。「そうすることが適切だから(推奨されるから)」が正確。 まあ対応したい内容次第ではいちいち別途クラス作る必要はなさそうですけど「クラスを作りたい」なのでそういう答えになりますね。
guest

回答1

0

この話をするには、サービスコンテナ、DIが前提知識として必要なのでまずはそれを勉強してほしい。

簡単にだけ説明すると、$this->app['validator']が登録済みの状態でないと、カスタムバリデータが登録できない、$this->app['validator']が確実に登録済みなのが、サービスプロバイダが実行される瞬間なため

投稿2019/05/17 06:44

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問