- vừa được xem lúc

Laravel: Validate dễ dàng hơn với FormRequest

0 0 5

Người đăng: Luu Tien Thai

Theo Viblo Asia

Việc validate là rất cần thiết kể cả về phía server hay là client. Và chắc hẳn khi chúng ta mới làm quen với laravel sẽ biết đến cách validate này

/** * Store a new blog post. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */
public function store(Request $request)
{ $validated = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // The blog post is valid...
}

Theo như document là Laravel cung cấp, ta đang sử dụng chức năng validate() được cung cấp bở class Request, nếu các field của chúng ta thỏa mãn các điều kiện theo yêu cầu thì hàm store sẽ tiếp tục xử lý bình thường. Nếu mộ trong các field không thỏa mã yêu cầu sẽ sinh ra Exception đồng thời trả lại lỗi cho người dùng ở dạng phù hợp. Nếu chúng ta muốn tái sử dụng phần validate này cho hàm khác thì sẽ phải coppy lại và paste vào hàm đó. Chưa kể đến nếu chúng ta có nhiều field cần validate thì việc này sẽ làm cho controller của ta khá là dài. Để giải quyết vấn đề này Laravel đã cung cấp cho ta một công cụ là Form Request

Cách tạo Form Request

Laravel cung cấp cho chúng ta câu lệnh

php artisan make:request <tên class bạn muốn tạo>

Câu lệnh này sẽ tạo cho ta một class trong thư mục Request. Và mặc định trông nó sẽ như thế này:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StorePostRequest extends FormRequest
{ /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; }
}

Để sử dụng được form request này thì bạn cần use chúng ở trong controller Giả sử như mình tạo một class tên là StorePostRequest:

php artisan make:request StorePostRequest

Sử dụng trong controller ở đây mình sử dụng cho hàm store:

use App\Http\Requests\StorePostRequest;
.........
public function store(StorePostRequest $request){
............
}

authorize():

Dùng để xác định xem người dùng nào có quyền thực hiện request này. Thường mình sẽ sửa lại thành return true tương ứng với ai cũng có thể thực hiện request này.Tạm thời cái này chúng ta chưa bàn đến

rules():

Dùng để xác định các quy tắc cho các fields mà chúng ta truyền lên: Cách thiết lập rules sẽ giống như chúng ta validation bên controller. Nó sẽ giống như thế này

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

Cách validate trên vẫn khá đơn giản. Giả sử chúng ta trong trường hợp cần validate phức tạp hơn. Ví dụ như chúng ta có thêm một trường comments kiểu array chẳng hạn. Và trông nó sẽ kiểu như thế này:

[ { vote: '1', content:'test validate' }, { vote: '2', content:'test validate' }, ]

Giả sử chúng ta muốn validate cái trường vote kia là integer chẳng hạn. Không thể dùng 'vote' => 'integer' được.Lúc đó chúng ta phải dùng thế này:

'comements.*.vote' => 'integer'

Dấu * ở đằng sau laravel sẽ hiểu là để truy cập vào từng phần tử của mảng, .vote là để truy cập đến thuộc tính vote của mỗi phần tử. Trường hợp phải validate một mảng truyền lên gặp khá là nhiều nên mình liệt kê ở đây. Ngoài ra vẫn còn nhiều trường hợp phức tạp khác nhưng hiện tại mình chưa nghĩ ra 😃)) Ngoài các rules mình liệt kê ở trên ra thì laravel còn cung cấp cho chúng ta khá nhiều rules nữa các bạn có thể xem tại đây :https://laravel.com/docs/9.x/validation#available-validation-rules Sau khi pass qua các rules này rồi thì controller sẽ tiếp tục được thực hiện.Còn nếu không pass thì server sẽ trả lại một message mặc đinh được laravel thiết lập sẵn tương ứng với từng rules.Để config lại phần message này thì chúng ta sẽ dùng hàm message().

message()

Để config lại phần message mà server trả ra theo ý của bạn thì chúng ta phải ghi đè hàm message của laravel. Chúng ta sẽ tạo một hàm message ở trong request mà chúng ta vừa tạo:

public function messages()
{ return [ 'title.required' => 'A title is required', 'body.required' => 'A message is required', ......... ];
}

Ở đây title.required là chúng ta đang config lại phần message cho rule required của trường title. Và với các trường khác cũng tương tự như vậy : 'tên-trường.rule' => '..........'

Kết bài

Ở trên mình đã nêu ra những thứ cơ bản về form request hi vọng là sẽ giúp ích được cho các bạn khi mới làm quen với framework laravel. Bài viết chắc hẳn sẽ còn nhiều thiếu sót các bạn có thể góp ý cho mình bằng cách comment ở dưới. Và cuối cùng cảm ơn các bạn rất nhiều vì đã giành thời gian đọc bài viết của mình 😄😄😄

Bình luận

Bài viết tương tự

- vừa được xem lúc

Được rồi, đi thôi!!! VPS free nè (^.^) [P1]

Bạn là sinh viên, bạn là lập trình viên khó khăn về mặt tài chính, bạn không có xiền thuê VPS, được rồi hãy đến đây!!!. Hôm nay mình sẽ hướng dẫn cho các bạn cách tạo VPS free bằng Github Workflow & N

0 0 45

- vừa được xem lúc

[Linux] Iptables trong hệ thống Linux

IPtables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng

0 0 34

- vừa được xem lúc

Từ bug format sai chuỗi số khi nhập bằng bàn phím tiếng Nhật, tới IME và các sự kiện composition trong JS

"Tự nhiên tui thấy hiện tượng lạ”. Khi nhập liệu một chuỗi các kí tự vào thẻ input, thông thường chúng ta nhập thế nào thì hiển thị thế ấy, không làm phép biến đổi gì cả.

0 0 36

- vừa được xem lúc

Tạo Rijndael S-box sử dụng trong AES

I. Rijndael S-box là gì .

0 0 25

- vừa được xem lúc

Giới thiệu về lỗ hổng tràn bộ đệm (Buffer Overflow) và cách khai thác

Khái niệm. Lỗ hổng tràn bộ đệm (Buffer Overflow) là lỗ hổng trong lập trình, cho phép dữ liệu được ghi vào một buffer có thể tràn ra ngoài buffer đó, ghi đè lên dữ liệu khác và dẫn tới hoạt động bất t

0 0 32

- vừa được xem lúc

Share Libraries Hijacking trên Linux

1. Cách thức hoạt động của Share Libraries.

0 0 17