post-image

Laravel Form validation – kiểm soát thông tin nhập liệu

Tổng quan

Laravel cung cấp rất nhiều cách thức để kiểm tra thông tin nhập trên các form nhập liệu, cách thức mặc định là sử dụng một base controller sử dụng trail ValidatesRequests, nó cung cấp rất nhiều các phương thức kiểm tra thông tin đến từ các HTTP request.

Danh sách các validate rule trong Laravel 5.4

Số lượng các validate rule là rất nhiều, đủ cho chúng ta kiểm tra dữ liệu các dạng thông tin nhập liệu:

  • Accepted
  • Active URL
  • After (Date)
  • After Or Equal (Date)
  • Alpha
  • Alpha Dash
  • Alpha Numeric
  • Array
  • Before (Date)
  • Before Or Equal (Date)
  • Between
  • Boolean
  • Confirmed
  • Date
  • Date Format
  • Different
  • Digits
  • Digits Between
  • Dimensions (Image Files)
  • Distinct
  • E-Mail
  • Exists (Database)
  • File
  • Filled
  • Image (File)
  • In
  • In Array
  • Integer
  • IP Address
  • JSON
  • Max
  • MIME Types
  • MIME Type By File Extension
  • Min
  • Nullable
  • Not In
  • Numeric
  • Present
  • Regular Expression
  • Required
  • Required If
  • Required Unless
  • Required With
  • Required With All
  • Required Without
  • Required Without All
  • Same
  • Size
  • String
  • Timezone
  • Unique (Database)
  • URL

Tuy nhiên, trong số này chúng ta chỉ sử dụng một số validate rule cơ bản. Laravel thường xuyên kiểm tra xem có lỗi xảy ra không và tự động hiển thị nó trong view nếu nó xảy ra. Biến $errors được định nghĩa cho mọi view và mọi request, nó là một instance của Illuminate\Support\MessageBag. Các thông báo lỗi có thể được đưa lên màn hình bằng cách chèn thêm đoạn code này vào bất kỳ đâu bạn muốn hiển thị thông báo.

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

Ví dụ sử dụng Form Validate kiểm tra thông tin nhập liệu

Ok, vẫn như thường lệ, chúng ta vào các ví dụ thực tế để tiếp cận kiến thức nhanh hơn. Chúng ta sẽ tạo ra một form đăng ký thành viên, form này nhập các thông tin như Họ và tên, địa chỉ email, password và nhập lại password, ngày sinh, trang web nếu có. Chúng ta sẽ thực hiện kiểm tra các thông tin nhập liệu như sau:

  • Họ và tên: bắt buộc, tối đa 255 ký tự.
  • Địa chỉ email: bắt buộc và phải có định dạng của email, ví dụ youremail@domain.com.
  • Mật khẩu: bắt buộc và phải có từ 6 ký tự trở lên chỉ bao gồm số và chữ.
  • Nhập lại mật khẩu: bắt buộc và phải trùng với mật khẩu.
  • Trang web: không bắt buộc nhưng nếu nhập phải là định dạng đường dẫn web, ví dụ http://yourdomain.com

Tạo UserController

c:\xampp\htdocs\laravel-test>php artisan make:controller UserController Controller created successfully.
Code language: CSS (css)

Thêm code vào UserController (app\Http\Controllers\UserController.php)

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Validator; use DB; class UserController extends Controller { // public function showRegisterForm(){ return view('fontend.register'); } public function storeUser(Request $request){ //dd($request->all()); $messages = [ 'required' => 'Trường :attribute bắt buộc nhập.', 'email' => 'Trường :attribute phải có định dạng email' ]; $validator = Validator::make($request->all(), [ 'name' => 'required|max:255', 'email' => 'required|email', 'password' => 'required|numeric|min:6|confirmed', 'website' => 'sometimes|required|url' ], $messages); if ($validator->fails()) { return redirect('register') ->withErrors($validator) ->withInput(); } else { // Lưu thông tin vào database, phần này sẽ giới thiệu ở bài về database return redirect('register') ->with('message', 'Đăng ký thành công.'); } } }
Code language: HTML, XML (xml)

tạo view chứa form đăng ký tên register (resources/views/fontend/register.blade.php)

@extends('layouts.default') @section('title', 'Đăng ký') @section('content') @if (count($errors) > 0) <div class="alert alert-danger"> Thông tin đăng ký không đầy đủ, bạn cần chỉnh sửa như sau: <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif @if (isset($message)) <div class="alert alert-success"> {{ $message }} </div> @endif {!! Form::open(array('url' => '/register', 'class' => 'form-horizontal')) !!} <div class="form-group"> {!! Form::label('name', 'Họ và tên *', array('class' => 'col-sm-3 control-label')) !!} <div class="col-sm-9"> {!! Form::text('name', '', array('class' => 'form-control')) !!} </div> </div> <div class="form-group"> {!! Form::label('email', 'Địa chỉ email *', array('class' => 'col-sm-3 control-label')) !!} <div class="col-sm-9"> {!! Form::email('email', '', array('class' => 'form-control')) !!} </div> </div> <div class="form-group"> {!! Form::label('password', 'Mật khẩu *', array('class' => 'col-sm-3 control-label')) !!} <div class="col-sm-9"> {!! Form::password('password', array('class' => 'form-control')) !!} </div> </div> <div class="form-group"> {!! Form::label('password_comfirmation', 'Nhập lại mật khẩu *', array('class' => 'col-sm-3 control-label')) !!} <div class="col-sm-9"> {!! Form::password('password_comfirmation', array('class' => 'form-control')) !!} </div> </div> <div class="form-group"> {!! Form::label('website', 'Website', array('class' => 'col-sm-3 control-label')) !!} <div class="col-sm-9"> {!! Form::text('website', '', array('class' => 'form-control')) !!} </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> {!! Form::submit('Đăng ký', array('class' => 'btn btn-success')) !!} </div> </div> {!! Form::close() !!} @endsection
Code language: HTML, XML (xml)

Thêm route vào routes/web.php

Route::get('register', 'UserController@showRegisterForm'); Route::post('register', 'UserController@storeUser');
Code language: PHP (php)

Ok, vào đường dẫn http://laravel.dev/register

Nhập thông tin đăng ký trong ví dụ làm việc với database trong laravel

Nhập các thông tin và click vào đăng ký, nếu dữ liệu nhập vào không đúng quy định nó sẽ hiển thị thông báo lỗi nhập liệu

Hiển thị thông báo lỗi nhập liệu trong ví dụ validate form trong Laravel

Ok, bạn thấy đấy, việc sử dụng Validate Form trong Laravel thật đơn giản. Trước đây khi làm một website bằng PHP riêng phần validate dữ liệu thôi cũng tốn không ít giấy mực. ## Hiển thị thông báo riêng khi Validate dữ liệu

Các thông báo lỗi khi validate dữ liệu trong Laravel là tiếng Anh và nội dung cố định, tuy nhiên Laravel cho phép bạn cá nhân hóa các thông báo này.

$messages = [ 'required' => 'Trường :attribute bắt buộc nhập.', 'email' => 'Trường :attribute phải có định dạng email' ]; $validator = Validator::make($request->all(), [ 'name' => 'required|max:255', 'email' => 'required|email', 'password' => 'required|numeric|min:6|confirmed', 'website' => 'sometimes|required|url' ], $messages);
Code language: PHP (php)

Kết quả như sau

Cá nhân hóa thông báo lỗi khi validate form trong Laravel

Lời kết

Kiểm tra dữ liệu người dùng nhập vào là khâu bắt buộc để đảm bảo dữ liệu “sạch” và theo đúng mong muốn thông tin cần thu thập. Validate Form trong Laravel rất đơn giản nhưng có khả năng kết hợp ra các cách thức kiếm tra rất phức tạp và khắt khe. Bài viết tạm dừng ở đây và hẹn gặp lại các bạn trong các bài viết tới liên quan đến Laravel.

Cảm ơn các bạn đã đọc.

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Nguồn tham khảo: allaravel

Leave a Reply

Your email address will not be published. Required fields are marked *