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

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

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

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

Q&A

解決済

2回答

2290閲覧

laravelのvalidatorがモデルクラスから追加できません

red13

総合スコア79

Laravel 5

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

0グッド

0クリップ

投稿2016/01/28 04:28

編集2016/01/28 04:29

コントローラ内で
$validator = Validator::make($input, $rules);
$validator->errors()->add('key', 'test');
と実装すると「test」を表示できます。

コントローラからモデルを呼び出し、モデル内で追加した場合に「test」が表示されません。
【コントローラ】
$validator = Validator::make($input, $rules);
$this->modelClass->valiAdd(validator);

【モデル】
public function valiAdd(validator) {
$validator->errors()->add('key', 'test');
}

バリデーションのメッセージはコントローラでしか追加できないのでしょうか?

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

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

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

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

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

guest

回答2

0

上記のような内容はカスタムバリデーションでやるのが普通ですが、、、
質問内容が動作しない理由は関数に渡した時点でオブジェクトのコピーが利用されるからです。

対処方法としては、&をつけて参照にすると良いでしょう。

public function valiAdd(&$validator) { $validator->errors()->add('key', 'test'); }

投稿2016/01/31 07:04

fagai

総合スコア2158

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

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

red13

2016/02/01 03:59

参照になるように修正してみます。
guest

0

ベストアンサー

$validatorをどうやって使っているのか見えないのでよくわかりませんが、
以下のようにすれば動きそうな気がします。

【コントローラ】
$validator = Validator::make($input, $rules);
$validator = $this->modelClass->valiAdd($validator);

【モデル】
public function valiAdd($validator) {
return $validator->errors()->add('key', 'test');
}

投稿2016/01/28 13:15

lightwill

総合スコア962

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

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

red13

2016/01/29 03:53

コントローラ内でlaravelが用意しているrequired等を実行し、 モデル内で独自実装したバリデーションを実行するという使い方です。
lightwill

2016/01/29 13:15

「カスタムバリデーション」で検索すると出てきますが、独自のバリデーションルールを追加して、requiredなどと同じようにmyruleとか指定するのが正しいやり方だと思います。 今回のようなやり方をするなら、モデルのメソッドではtrue,falseを返して、falseだったらコントローラでメッセージを追加するとかでもよいかと思います。
red13

2016/02/01 03:58

コントローラにあまり処理を書きたくなかったのですが ある程度は仕方ないのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問