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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

524閲覧

<PHP Laravel5 オリジナルバリデータの作成>

saitani

総合スコア13

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/11/30 07:16

私はPHP初心者で「Laravel入門」という本を購入して勉強中です。
本書の中で、オリジナルバリデータの作成のために書いたコードの意味がわかりません。(P148~P151)ここのコードの意図や意味がわからず解読できず途方に暮れています、ご教授いただければ幸いです、よろしくお願いいたします。

①下記のサービスプロバイダのresolverメソッドそのものの仕組みがわかりません。
これがどのようにしてHelloValidatorクラスのインスタンスを返すことになっているのでしょうか?また、この引数は具体的にどのような働きをしていますか?(クロージャーや$translator, $data,$rules, $messages)

②下記の新たに定義したバリデータのルール中で引数は具体的になにを意味していますか?($attribute, $value, $parameters)
サービスプロバイダでHelloValidatorクラスに引数を入れてインスタンス化しますがその引数との具体的な関係をご教授ください。

新たに定義したバリデータのルール

<?php namespace App\Http\Validators; use Illuminate\Validation\Validator; class HelloValidator extends Validator { public function validateHello($attribute, $value, $parameters) { return $value % 2 == 0; } }

サービスプロバイダ

<?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; use Illuminate\Validation\Validator; use App\Http\Validators\HelloValidator; class HelloServiceProvider extends ServiceProvider { public function boot() { $validator = $this->app['validator']; $validator->resolver(function($translator, $data, $rules, $messages) { return new HelloValidator($translator, $data, $rules, $messages); }); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

初心者がするレベルの質問内容ではない気がしますが・・・。
自分の勉強にもなりそうなので書いておきます。

①下記のサービスプロバイダのresolverメソッドそのものの仕組みがわかりません。

単純に言うと、バリデータのインスタンスを生成します。
具体的なコードはこれ。

Illuminate\Validation\Factory

php

1 protected function resolve(array $data, array $rules, array $messages, array $customAttributes) 2 { 3 if (is_null($this->resolver)) { 4 return new Validator($this->translator, $data, $rules, $messages, $customAttributes); 5 } 6 7 return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes); 8 }

既存のリゾルバが無ければバリデータインスタンスを生成して返し、あれば既存のリゾルバに引数を渡して(コールバックして)結果を返す。
バリデータインスタンスの中身を知りたければ、Illuminate\Validation\Validatorをどうぞ。

laravelのコアに関わってくるので、本当の初心者はここまで知る必要はないと思います。
カスタムバリデータの追加の手順だけ知っておけば充分ではないのでしょうか。

②下記の新たに定義したバリデータのルール中で引数は具体的になにを意味していますか?

Laravel 5.5 バリデーション

ところで、HelloServiceProvider::bootresolverで引数が1つ足りないですね。
attributesを変更しないならいいんですが、そのままだとたぶん変更が反映されないと思いますよ。
その本が間違っているのでしょうか?

投稿2018/12/01 09:22

kgm

総合スコア275

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

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

saitani

2018/12/02 05:29

kgm様、非常にわかりやすくご回答いただき本当にありがとうございます。 ご教示いただいたファイルを確認し内部的な処理の流れはおかげさまでよく理解できました。 今後はコードの解読をもっとできるように基礎力をつけていきたいと思います。 HelloServiceProvider::bootのresolverの引数が1つ足りないのもご教示いただいたファイルのコードにて確認しました。 実際に自分でコードを書く時は引数を1つ追加するようにいたします。 大変感謝いたします、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問