N_OR’s diary

無職が何か言ってる

laravelでのvalidation処理2

laravelのvalidationの色んなやり方を試す。
今回はコントローラ側でValidatorを作ってチェックする。
エラー後の動作は自分でハンドリングする。

use Illuminate\Support\Facades\Validator;

/**
* ユーザ情報更新
*/
public function postEditUser(Request $request)
{
    $validate = Validator::make(
        $request->all(),
        // チェック内容
        [
            'id' => 'required',
            'name' => 'required',
            'email' => 'required',
        ],
        // エラー文言
        [
            'id.required' => ':attributeは必須です。',
            'name.required' => ':attributeは必須です。',
            'email.required' => ':attributeは必須です。',
        ],
        // attribute
        [
            'id' => 'ID',
            'name' => '名前',
            'age' => '年齢'
        ]
    );

    if ($validate->fails())
    {
        // エラーあり
        Log::debug('エラーあり' . $validate->messages());

        // TODO:responseのjsonを作りたい
        $res = new class
        {
            public $has_error = true;
            public $message = null;
        };

        $res->message = $validate->messages();
        return json_encode($res);
    }

    // TODO:正常時の処理
}

ちなみに、nameの項目が未入力だった場合の$validate->messages()はこんな感じ

{
    "name": ["名前は必須です。"]
}

自分でエラー時のレスポンス作るなら、システム的に統一したフォーマットを作った方が良いので個別のコントローラでレスポンスを作ることはないんじゃないかしらと想定。
この書き方はちょいプロ用かな。