Làm thứ làm cho Laravel Request của bạn thú vị hơn

PHP Laravel 5 Validator cơ bản

PHP Laravel 5 Validator cơ bản

Như các bạn đã biết ở bài trước, chúng ta đã có thể nhận thông tin từ form POST hoặc GET.

Nhưng nếu như users ko điền gì thì sao, hoặc user điền ko đúng theo định dạng thì sao?

Vậy nên, trước khi ta bắt đầu xử lý, ta sẽ kiểm tra đầu vào, và Laravel đã hỗ trợ chúng ta điều đó, là Validator.

Mục lục:

  1. Khởi tạo Validator ở Laravel 5.
  2. Khai báo và sử dụng Validator cơ bản.
  3. Các cấu trúc để kiểm tra.
  4. Sửa thông báo theo ý muốn.

1/ PHP Laravel 5 Validator – Khởi tạo Validator:

Để sử dụng được Validator, ta cần phải use thư viện sau:

use Validator;

Đơn giản vậy thôi :D.

*Lưu ý: Chúng ta sẽ kiểm tra đầu vào ở đâu? Tất nhiên là ở Controller nhé.

2/ PHP Laravel 5 Validator –  Khai báo và sử dụng Validator cơ bản:

Ví dụ mình có một form như sau:

<form action="/doPost" method="POST">
	<input type="hidden" name="_token" value="{{ csrf_token() }}">
	
	<label>Tên tài khoản: </label>
	<input type="text" name="username"> <br>
	
	<label>Email: </label>
	<input type="text" name="email"><br>

	<label>Phone: </label>
	<input type="text" name="phone"><br>

	<button type="submit">Ok</button>
</form>

Giờ mình muốn kiểm tra như sau:

  • Tên tài khoản: bắt buộc nhập, có từ 6 kí tự trở lên
  • Email: bắt buộc nhập, đúng định dạng
  • Phone: bắt buộc nhập, chỉ là số(không chữ)

Vậy nên, mình sẽ gom Request lại và tạo ra 1 Rules cho Validator như sau:

public function doPost(Request $rq) {
	// Lấy post hiện tại
	$posts = [
		'username'				=> $rq->username,
		'email'					=> $rq->email,
		'phone'					=> $rq->phone
	];
	
	// Tạo rules
	$rules = [
		'username'				=> 'required|min:6',
		'email'					=> 'required|email',
		'phone'					=> 'required|numeric'
	];

Rules mình sẽ giải thích ở phần sau, các bạn cần chú ý, tên của array $posts phải như tên của array $rules nhé (username với username,….)

Và tiếp theo, mình sẽ chạy Validator và kiểm tra

// Kiểm tra giá trị nhập vào qua Validator:
	$valid = Validator::make($posts, $rules);
	
	// Kiểm tra nếu có lỗi
	if ($valid->fails()) {
		return redirect()->back()->withInput()->withErrors($valid);
	}
	else {
		// Không có lỗi, xử lý tiếp,...
	}

Nếu $valid fail có nghĩa là các giá trị nhập vào còn sai, ở đây mình sẽ cho nó redirect về trang trước kèm postlỗi trả về.

Để xem được lỗi trả về ở trang view, các bạn có thể dùng code mẫu của mình:

@if (count($errors) > 0)
     <div class="alert alert-danger">
         <ul>
         @foreach ($errors->all() as $error)
             <li>{{ $error }}</li>
         @endforeach
         </ul>
     </div>
@endif

Ở đây lỗi trả về nguyên bản tiếng Anh nhé.

3/ Các cấu trúc của Validator để kiểm tra:

Laravel 5 hỗ trợ ta rất rộng về vụ này, và những cái chúng ta sẽ hay dùng là:

TênGiải thích
requiredBắt buộc phải nhập, chọn(đối với select, radio và checkbox)
emailNhập vào phải là EMAIL đúng định dạng
min:(số nguyên)Ít nhất bao nhiêu ký tự (vd: min:10 - ít nhất 10 kí tự)
max:(số nguyên)Tối đa bao nhiêu ký tự (vd: max:10 - tối đa 10 kí tự nhập vào)
numericNhập vào phải là SỐ
(File upload) imageFile up lên phải là hình (.jpg, .png,...)
(File upload) min:(size theo Kb)File up lên ít nhất fải nặng bao nhiêu(vd: min:512)
(File upload) max:(size theo Kb)File up lên tối đa phải nặng bao nhiêu (vd: max:1024)
regex:(type)Dùng regular Expression để kiểm tra.Vd: regex:[0-9]+ => giá trị nhập vào phải là số từ 0->9
same:(tên trường)Kiểm tra xem có trùng với trường nào ko. Vd: same:retype_pass (Kiểm tra nếu pass nhập lại trùng với pass mới)

4/ Sửa thông báo theo ý muốn:

Tất nhiên, vì tất cả thông báo ra đều là tiếng anh theo một khuynh hướng của Laravel, nó làm cho chúng ta cảm thấy kì kì phải ko?

Chúng ta có thể sửa thông báo theo ý muốn bằng cách vào theo đường dẫn này và mở file:

resources/lang/en/validation.php

Mở file lên và ta kéo xuống tận phần custom:

'custom' => [
//

],

Và bây giờ chúng ta chỉ cần định nghĩa tên trường + các trường hợp ra thôi, vd ở 3 trường hợp VD trên:

'custom' => [
	// Trường username
	'username'	=> [
		'required'		=>	'Xin hãy nhập username',
		'min'			=>	'Xin hãy nhập username có hơn :min kí tự'
	],
	
	// Trường email
	'email'		=> [
		'required'		=>	'Xin hãy nhập đầy đủ email',
		'email'			=>	'Xin hãy nhập đúng định dạng email'
	],
	
	'phone'		=> [
		'required'		=>	'Xin hãy nhập đầy đủ số dt',
		'numeric'		=>	'Số điện thoại phải là SỐ'
	]

],

Và nếu sau này, chúng ta có đặt tên tương tự vào username, email, phone. Nó sẽ trả ra kết quả tương tự nhé. Chỉ thêm đổi 1 lần thôi 😀

Quá tiện lợi và hữu ích phải không nào? 😀

Các bài Laravel 5 tổng hợp: http://sethphat.com/sp-category/lap-trinh/laravel-5-php

Bài Laravel tiếp theo: Xử lý upload hình ảnh với Laravel

Cám ơn các bạn đã quan tâm 😀

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

One thought on “PHP Laravel 5 Validator cơ bản

Comments are closed.

Bình luận qua Facebook