Validation form là gì?
- Một tính năng khác khá hay, và được dùng thường xuyên của Laravel, đó là validation các giá trị nhập từ form.
- Dùng kiểm tra các giá trị nhập từ các thành phần của form có đúng hay không, có phù hợp với các yêu cầu được khai báo hay không.
- Các giá trị validation dễ điều khiển, đa dạng, có thể thêm các thuộc tính khác nếu cần.
- Kết quả sẽ trả về lỗi nếu không đạt yêu cầu validation, nội dung lỗi có thể tùy biến thay đổi dễ dàng.
Thực hiện một validation form
- Trước tiên ta cần một trang View có nội dung là một form với vài nội dung nhập dữ liệu.
- Một Controller điều khiển các giá trị validation.
- Một Routing điều hướng trang hiển thị nhập và trang hiện thị dữ liệu lỗi hay thông báo thành công sau khi form được nhấn Submit.
- Tạo nội dung các file trên theo cấu trúc thư mục sau:
myproject
app
Http
Controllers
- PostController.php
resources
views
admin
- create.blade.php
routes
- web.php
TẠO TRANG VIEW: create.blade.php
(Nếu chưa biết về file View thì xem lại phần Cách tạo file Views).
Đặt file này trong thư mục /resources/views/admin/, với nội dung sau:
<!doctype html> <html> <head> <title>Login Form</title> </head> <body> <form method="post" action="/admin/create"> @csrf <p>Title<br> <input type="text" name="title" value=""></p> <p>Description<br> <textarea rows="5" cols="40" name="description"></textarea></p> <p><button type="submit">Submit</button></p> </form> </body> </html>
method="post"
- phương thức post của form.@csrf
- tạo một chuỗi CSRF ngẫu nhiên, thuộc tính cần được sử dụng thường cho form, nói về nó sau.action="/admin/create"
- khi click button Submit, sẽ post dữ liệu tới /admin/create, cũng là chính trang View này.name="title"
- dữ liệu sẽ được nhận thông qua name là title.name="description"
- dữ liệu sẽ được nhận thông qua name là description.type="submit"
- Dữ liệu sẽ gửi thông qua hành động click button.
TẠO MỘT CONTROLLER: PostController.php
Tạo Controller bằng lệnh Artisan:
php artisan make:controller PostController
Controller PostController.php này được đặt trong thư mục /app/Http/Controllers/, với nội dung mặc định sau:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller { // }
Thêm nội dung cho Controller này với function showform() - hiển thị trang xem nội dung form:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller { public function showform() { return view('admin/create'); } }
return view('admin/create');
- hiển thị nội dung View create.blade.php tạo bên trên, khi thực hiện điều hướng từ Routing tới ControllerPostController@showform
TẠO MỘT ROUTING điều hướng nội dung function showform()
trong Controller vừa tạo
(Nếu chưa biết về cách viết một Routing thì xem lại phần Cách tạo Routing).
Route::get('/admin/create', 'PostController@showform');
Route::get
- nhận yêu cầu từ người dùng, trả về functionshowform
./admin/create
- Khi gõ đường dẫn này lên trình duyệt, thì sẽ tiến hành xử lý ControllerPostController
tại functionshowform
của Controller PostController.php
- Nếu tạo file với nội dung giống như trên, gõ lên trình duyệt đường dẫn http://localhost:82/admin/create sẽ thấy được nội dung trang /admin/create vừa tạo:
TẠO MỘT FUNCTION TRONG CONTROLLER ĐIỀU KHIỂN validation: PostController.php
Tạo function validationform bên trong controller PostController.php để tiến hành kiểm tra các giá trị nhập từ form:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostController extends Controller { public function showform() { return view('admin/create'); } public function validationform(Request $request) { echo "<pre>"; print_r($request->all()); echo "</pre>"; $this->validation($request,[ 'title'=>'required|max:50', 'description'=>'required' ]); } }
$this->validation()
: Kiểm tra các giá trị form'title'=>'required|max:255'
: Kiểm tra giá trịtitle
nhập từ form, với giá trịrequired
(bắt buộc),max:255
(giới hạn 50 ký tự).'description'=>'required'
: Kiểm tra giá trịdescription
nhập từ form, với giá trịrequired
(bắt buộc)
print_r($request->all())
: in tất cả các giá trị nhập từ form.
TẠO MỘT ROUTING điều hướng nội dung function validationform()
trong Controller vừa tạo
Route::get('/admin/create', 'PostController@showform'); Route::post('/admin/create', 'PostController@validationform');
Route::post
- Lấy dữ liệu post từ form trả về functionvalidationform
bên trong Controller./admin/create
- điều hướng trả kết quả về trang /admin/create.
VIẾT THÔNG BÁO LỖI TẠI VIEW: create.blade.php
Xuất ra thông báo lỗi, nếu không thỏa các điều kiện validation được viết tại controller PostController.php
<!doctype html> <html> <head> <title>Login Form</title> <style type="text/css"> .error-message { color: red; } </style> </head> <body> @if (count($errors) > 0) <div class="error-message"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form method="post" action="/admin/create"> @csrf <p>Title<br> <input type="text" name="title" value=""></p> <p>Description<br> <textarea rows="5" cols="40" name="description"></textarea></p> <p><button type="submit">Submit</button></p> </form> </body> </html>
count($errors) > 0
- Đếm lỗi lớn hơn 0.@foreach ($errors->all() as $error)
- Chạy vòng lặp @foreach để hiển thị các lỗi thỏa điều kiện if bên trên..error-message { color: red; }
- CSS hiển thị text màu đỏ cho text báo lỗi.
- Khi này, nếu nhập title và description không đúng điều kiện trong Controller, thì sẽ báo lỗi, ví dụ ta bỏ trống 2 field này và click button
Submit
:
- Nội dung thông báo lỗi là mặc định có trong Laravel.
- Nếu nhập title và description đúng các điều kiện trong Controller, thì sẽ in ra dữ liệu của title và description vừa nhập:
Array ( [_token] => wYhCZEcm1mlzud8NlFD0ITDSoTShNHLSKAJdppvt [title] => hello [description] => Đây là description )
- Tới đây ta đã biết cách viết một validation form như thế nào, bài tiếp theo sẽ giới thiệu các giá trị validation có thể sử dụng trong Laravel.