Laravel FormRequest: Modify input trước khi xử lý validate
Hôm nay mình làm việc với Laravel và gặp ngay một trường hợp đó là mình dùng FormRequest để xử lý input trước khi validation được thực thi.
Ok mình sẽ tạo một TestRequest nhé:
php artisan make:request TestRequest
Mình viết logic cho TestRequest như sau:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TestRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
// nếu trong input không có code
if (blank($this->code)) {
// tự động thêm code
$this->merge([
'code' => str_random($length = 10);
])
}
return [
'code' => 'required',
];
}
}
Và như thường lệ mình hí ha hí hửng bật trình duyệt nhấn F5, nhưng cái kết đắng nghét 🤒, ăn ngay cái validate errors vào mặt. WHY? what's wrong? mình đã làm gì sai chứ, mình dd($this)
để chắc chắn rằng code
input đã được merge vào request input, vẫn có và validate fails
vẫn trả về.
Và đây là giải pháp nhé:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TestRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'code' => 'required',
];
}
protected function getValidatorInstance()
{
// nếu trong input không có code
if (blank($this->code)) {
// tự động thêm code
$this->merge([
'code' => str_random($length = 10);
])
}
return parent::getValidatorInstance();
}
}
Hi vọng bạn nào gặp trường hợp giống mình sẽ không phải mất nhiều thời gian để xử lý vấn đề nhé 😃😃
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận
Thắng Dương
Hay anh ơi