Validate dữ liệu sử dụng Form Request

Trong hầu hết những ứng dụng Web ngày nay thì form là 1 trong nhưng đối tượng tương tác với người dùng nhiều nhất.Đơn giản như khi bạn đăng 1 bài Post trên facebook của mình, Facebook sẽ lưu lại bài post đó trong database và hiển thị đến những người bạn của bạn 😄 😄. Tất cả những input đó phải được validate để đảm bảo rằng dữ liệu trong đó phải theo đúng chuẩn mà ứng dụng của bạn có thể xử lý, hơn thế nữa việc validate dữ liệu sẽ giúp ứng dụng của bạn bảo mật tốt hơn ! Trong Laravel bạn có thể dễ dàng truy cập đến request được gửi từ phía người dùng.ví dụ để truy cập title của 1 input : $request->title (với title là name của input đó), nhưng nó sẽ tiềm ẩn 1 vấn đề. hãy cùng tìm hiểu nhé``

Tạo Model từ request data

trong controller:

public function store(PostRequestForm $form)
{
    Post::create([
        'title' => $form->title,
        'content' => $form->content
    ]);
}

hoặc có thế là :

public function store(PostRequestForm $form)
{
    Post::create($form->only(['title', 'content']));
}

2 cách viết trên hoàn toàn hợp lệ. Nhưng khi đứng ở trong controller ta không biết được liệu title và content đã được validate hay chưa và điêu này thật nguy hiểm 😄

Bắt buộc validate dữ liệu

Bây giờ trong class PostRequestForm của mình chúng ta set các rules :

public function rules()
{
    return [
        'title' => 'required|string|max:255',
        'content' => 'required|string'
    ];
}

và sau đó thêm thêm 1 method tới object request của chúng ta

/**
 * @return array
 */
public function validatedInputs()
{
    $keys = array_keys($this->rules());

    return $this->only($keys);
}

và bây giờ trong các input của chúng ta đã được validate :

public function store(PostRequestForm $form)
{
    Post::create($form->validatedInputs());
}

điều này khiến chúng ta cảm thấy an toàn hơn 😃 Trên đây là 1 chút chia sẻ của mình về validate dữ liệu rất mong nhận được sự đóng góp của mọi người 😃) Nguồn : https://timacdonald.me/enforcing-valid-data-access-from-form-request-object/?utm_source=learninglaravel.net