'required|integer', 'entry_date' => 'required|date_format:Y-m-d', 'user_information_history' => 'required|string|max:255', ]; } /** * バリデーションエラーメッセージ */ public function messages(): array { return [ 'user_id.required' => 'E02: user_id が未設定です。', 'user_id.integer' => 'E02: user_id は整数で指定してください。', 'entry_date.required' => 'E04: entry_date が未設定です。', 'entry_date.date_format' => 'E05: entry_date の形式が不正です。YYYY-MM-DD形式で指定してください。', 'user_information_history.required' => 'E06: user_information_history が未設定です。', 'user_information_history.string' => 'E06: user_information_history は文字列で指定してください。', 'user_information_history.max' => 'E07: user_information_history が255文字を超えています。', ]; } /** * 追加バリデーション */ public function withValidator(Validator $validator) { $validator->after(function ($validator) { // user_idのエラーがない場合のみ存在チェック if (!$validator->errors()->has('user_id') && $this->user_id) { if (!User::where('user_id', $this->user_id)->exists()) { $validator->errors()->add('user_id', 'E03: 指定された user_id が userテーブルに存在しません。'); } } }); } /** * バリデーション失敗時の処理 */ protected function failedValidation(Validator $validator) { $errors = $validator->errors()->first(); // エラーコード抽出 preg_match('/^(E\d{2}):/', $errors, $matches); $errorCode = $matches[1] ?? 'E99'; $message = preg_replace('/^E\d{2}: /', '', $errors); throw new HttpResponseException( response()->json([ 'error' => [ 'code' => $errorCode, 'message' => $message ] ], 400) ); } }