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 trong Laravel, 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 [email protected]

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', '[email protected]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', '[email protected]');
Route::post('/admin/create', '[email protected]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.

THÔNG BÁO LỖI