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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

3513閲覧

Laravel5.4にてバリデーションで他の属性の値を参照した時、エラーメッセージの置き換えがうまくいかない

keng

総合スコア32

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2017/11/18 04:41

編集2017/11/18 09:09

こちらのサイトを参考にさせていただきbetweenでのバリデーションはかけられるようになったのですが、エラーメッセージが正しく表示されません。

まず以下のような書き換えを行いました。

php

1 protected function validateBetween($attribute, $value, $parameters) 2 { 3 //requestのバリデーションルールの中で他の属性の値を比較できるようにする(最大値のみ) 4 if (!is_numeric($parameters[1]) && 5 !is_null($val = $this->getValue($parameters[1]))) 6 { 7 $parameters[1] = $val; 8 } 9 10 $this->requireParameterCount(2, $parameters, 'between'); 11 12 $size = $this->getSize($attribute, $value); 13 14 return $size >= $parameters[0] && $size <= $parameters[1]; 15 }

仮に下記のようなルールでバリデーションをかけたものとします。

php

1'point' => 'between:1,num',

ここまででバリデーションは正しく動作していますが、エラーメッセージが**ポイントは1〜numまでの数値を入力してください。**というようになってしまいます。

次にサービスプロバイダを継承したValidatorServiceProvidorを作成し、そのbootメソッドの中に下記を追記しました。

php

1Validator::replacer('between', function($message, $attribute, $rule, $parameters) { 2 return str_replace(':max', $this->getAttribute($parameters[1]), $message); 3});

ここで__Call to undefined function App\Providers\getAttribute()__のエラーが発生してしまいました。
色々試してますがうまくいきません、どうしたらよいでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

str_replaceの':num'というのはどこから出てきた情報ですか?
Laravel5.5で試しましたが一例として以下の日本語定義ファイルを元にすれば、
caouecs/Laravel-lang

'between' => [ 'numeric' => ':attributeには、:minから、:maxまでの数字を指定してください。', 'file' => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。', 'string' => ':attributeは、:min文字から:max文字にしてください。', 'array' => ':attributeの項目は、:min個から:max個にしてください。', ],

サービスプロバイダ等で以下のように登録すれば、質問の改変した2つめのパラメータを他のデータから取得して判定するBetweenバリデーションに対して置換できるかと思います。

\Validator::replacer('between', function ($message, $attribute, $rule, $parameters,$validator) { return str_replace([':min',':max'], $validator->getData(), $message); });

[追記]
質問が編集される前のものを参照しての回答なので、ズレが起きているかもしれません。
getAttributeが無いというのは、getDataにしてください。
Illuminate\Validation\Validatorを確認してください。

投稿2017/11/18 10:03

編集2017/11/18 10:09
aro10

総合スコア4106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問