Request後にFormRequestのバリデーションデータを操作する

標題の通りですが、どのような機会に必要でしょうか。

私が遭遇した場面ですと、POST Requestにはuser_idを含めない but バリデーションrulesの中で、user_idを利用したい場合です。
例えば、category_idとuser_idの掛け合わせた場合のUnique処理などです。

validationData()を利用.

FormRequestのクラス内でvalidationDataを使うとバリデーションデータを変更可能 ※ただし、Requestデータが変更される訳ではないのでご注意を。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Auth;

class CommentRequest extends FormRequest
{
    //
    //省略
    //
    protected function validationData()
    {
        $data = $this->all();
        $data['user_id'] = Auth::id();

        // dd($data); // $dataを確認して見て下さい。

        return $data;
    }

    public function rules()
    {
        $user_id = $this->validationData()['user_id']; //validationData()を呼び出しています。

        return [
            'comment' => 'required',
            'category_id' => 
                ['required',Rule::unique('comments', 'channel_id')->where('user_id', $user_id)],            
          ];
    }    

    //
    //省略
    //

}

他のメソッドも合わせて紹介されている下記、ご参考に!
※ メソッドをpublic指定して下さいとErrorが出たので、ご注意を。

FormRequestでバリデーションを行う前に値を操作する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です