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

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

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

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

Q&A

解決済

2回答

459閲覧

laravel5.5 make:requestで作成されたFormRequestのvalidation後、値を書き換えたい

roux

総合スコア7

Laravel 5

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

0グッド

0クリップ

投稿2018/04/11 06:43

前提・実現したいこと

コントローラにて

php

1 public function store(Request $request) 2 { 3 4 $validator = Validator::make($request->all(), [ 5 'title' => 'required|unique:posts|max:255', 6 'body' => 'required', 7 ]); 8 if ($validator->fails()) { 9 $request->merge(['validated' => 'true']); // フィールドの追加 10 return redirect('tests') 11 ->withErrors($validator) 12 ->withInput(); 13 } 14

このような処理をかけて、redirect先のフォームで

old("validated") # => 'true'

のような処理を考えています。
これはコントローラから注入すれば動作はするのですが...

このvalidationをコントローラから切り離して

php

1 public function store(MyRequest $request) 2 { 3/* これらのソースコードはMyRequestで処理させる 4 $validator = Validator::make($request->all(), [ 5 'title' => 'required|unique:posts|max:255', 6 'body' => 'required', 7 ]); 8 if ($validator->fails()) { 9 $request->merge(['validated' => 'true']); // フィールドの追加 10 return redirect('tests') 11 ->withErrors($validator) 12 ->withInput(); 13 } */

ここで

php artisan make:request MyRequest

このようなリクエストを作成し、いわゆるFormRequestで行いたいのですが、何らかのメソッドをoverrideすれば可能なのでしょうか、もしくは、

After Validation Hook というのが使えそうなのですが、どのように書けばよいのかわからず質問させていただきました。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

laravel/framework v5.5.40

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

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

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

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

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

guest

回答2

0

ベストアンサー

5.5だと

php

1namespace App\Http\Requests; 2 3use Illuminate\Foundation\Http\FormRequest; 4 5// 追加する 6use Illuminate\Contracts\Validation\Validator; 7use Illuminate\Http\Exceptions\HttpResponseException; 8 9 10class MyRequest extends FormRequest 11{ 12 13/*他は省略*/ 14 15 protected function failedValidation( Validator $validator ) 16    throw new HttpResponseException( 17 redirect('tests') 18 ->withErrors($validator) 19 ->withInput() 20 ->with('validated', true); 21    ); 22 } 23}

こんな感じ・・?

検証環境がないので、中身はかなり適当に書いてます。

HttpResponseException に、レスポンスを渡せばいいはずなのですが、動かなかったら、すみません^^;

投稿2018/04/11 09:42

mix-peach

総合スコア1910

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

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

0

ご回答ありがとうございます。これだと動かなかったので若干修正したら期待通りとなりました。

php

1 protected function failedValidation(Validator $validator) 2 { 3 4 $this->merge(['validated' => 'true']); 5 throw new HttpResponseException( 6 redirect('tests') 7 ->withErrors($validator) 8 ->withInput($this->input()) 9// ->with('validated', "true") 10 ); 11 }

with()ではredirect先で取れなかったため、前段でmerge()しておいて、withInput()内にinput()で値を再度詰め直す事で取れるようになりました。ありがとうございました。

投稿2018/04/11 10:23

roux

総合スコア7

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

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

mix-peach

2018/04/11 10:39 編集

はっ。 oldinputとして取りたい場合は、そうですね^^ 補足として、with()は、セッションに保存されますので、リダイレクト先では、 Session::get('validated') で取得できるかと思います。
roux

2018/04/11 15:13

なるほど、大変勉強になりました。そのような取り方もあるのですね。重ねて御礼申しあげます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問