Custom validation trong Laravel
Mình đang xử lí validation bằng FormRequest, giờ muốn custom lại với mỗi lỗi thì trả ra 1 mã code, đại tỉ như sau
public function rules()
{
return [
'channels' => 'required|array',
];
}
protected function failedValidation(Validator $validator)
{
if(lỗi do required)
throw new HttpResponseException(response()->json($errors, 411)); //Trả về code 411
}
if(lỗi do array) {
throw new HttpResponseException(response()->json($errors, 412)); //Trả về code 412
}
Nhưng đang vướng k biết check if kiểu gì, có bạn nào làm rồi cho mình xin giải pháp với ạ. Cảm ơn mọi người
2 CÂU TRẢ LỜI
bạn tham khảo thử phần Laravel Custom message xem sao https://laravel.com/docs/5.7/validation#customizing-the-error-messages
Mình đang muốn custom cái mã code trả ra cơ bạn, k phải messages. Trong Laravel bất kì 1 validate nào fails đều ra mã 422, giờ t muốn với mỗi validate trả ra 1 mã lỗi cơ mà,.
mình nghĩ cái này là có chuẩn rồi, bạn không nên động vào nó. =))
@jquery123 có vẻ như bạn đang viết API cho app à và bên app yêu cầu mỗi message lỗi thì 1 mã khác nhau để show ra bên app thì phải :v
Validator
có method failed()
, return array dạng:
/*
* Example array of $failedRules
* [
* "password" => [
* "Required" => []
* ],
* "accept_term" => array:1 [
* "Accepted" => []
* ],
* "invitation_code" => array:1 [
* "App\Rules\CustomRule" => []
* ]
* ]
*/
$failedRules = $validator->failed();
Bạn có thể dựa vào cái này để check điều kiện cho từng rule
Bonus bạn có thể xử lý lỗi validation tập trung tại class App\Exceptions\Handler.php
mà không phải custom từng FormRequest
.
Tham khảo: https://github.com/laravel/framework/blob/5.7/src/Illuminate/Foundation/Exceptions/Handler.php#L231