Validation form

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 PostController.php
  • resources

    • views

      • admin

        • create.blade.php create.blade.php
  • routes

    • web.php 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

Tạo validation form

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 Controller PostController@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ề function showform.
  • /admin/create - Khi gõ đường dẫn này lên trình duyệt, thì sẽ tiến hành xử lý Controller PostController tại function showform 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:

validation form

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ề function validationform 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:

validation form

  • 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.