algolia search

Tìm thấy x bài viết trong xms.

Laravel FormRequest: Modify input trước khi xử lý validate

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é 😃😃

Đánh giá bài viết

Thích thì like
Laravel FormRequest: Modify input trước khi xử lý validate
0/5 0 votes

Bình luận

Thắng Dương avatar
Thắng Dương

Hay anh ơi

Hiển thị bình luận Facebook