Hướng dẫn php request validation - xác thực yêu cầu php

Hướng dẫn php request validation - xác thực yêu cầu php

Đã đăng vào thg 3 21, 2018 2:31 CH 2 phút đọc 2 phút đọc

Để dễ dàng validate dữ liệu phức tạp và nhiều trường cần validate thì Laravel cung cấp một giải pháp mà laravel gọi là

custom request classes that contain validation logic.

Tạm dịch là một lớp tùy chỉnh nơi mà kiểm soát tính hợp lệ của dữ liệu đầu vào. Sau khi một request được gửi lên từ phía client thì request sẽ được validate dữ liệu bởi class form request trước khi được controller sử dụng

Vậy làm sao để sử dụng nó

Rất đơn giản, bạn chỉ việc gõ dòng lệnh Artisan CLI

php artisan make:request NameRequest

là mọi thứ đã sẵn sàng cho bạn custom tại thư mục: app/Http/Requests

Tại class này bạn có thể thoải mái thêm vào các validation rules mà bạn muốn

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}

Hàm authorize() dùng để Determine if the user is authorized to make this request . Ví dụ như bạn muốn xác thực xem một người dùng có cố chỉnh sửa comment mà họ không sở hữu không.

public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}

Chú ý: commentId được lấy từ tham số của URI khi như tham số {comment} được truyền vào trong route bên dưới:

Route::post('comment/{comment}');

Nêu hàm authorize() trả về false thì một HTTP response với status 403 sẽ được tự động trả về và controller method của bạn sẽ không được thực hiện. Nếu không cần xác thực gì thêm hoặc thực hiện việc đó ở một nơi khác bạn có thể

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
2 trong hàm authorize() cho lẹ :3

public function authorize()
{
    return true;
}

Hàm rules() sẽ trả về một mảng các messages errors nếu như dữ liệu không phù hợp với validation rules bạn yêu cầu. Dĩ nhiên bạn có thể thoải mái custom lại nó cho phù hợp với yêu cầu sử dụng. Ví dụ như bạn muốn hiển thị message errors bằng tiếng việt trong khi các messages viết sẵn là tiếng anh chẳng hạn.

 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }

Mọi việc đã xong bây giờ bạn chỉ cần

use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}

là có thể sử dụng request đã được validate rồi.

Mình cũng mới học laravel chưa lâu nên bài viết còn nhiều thiếu sót :3 ahihi. Hẹn gặp trong các bài viết sau =))

All rights reserved

Giới thiệu

Khi làm việc với bất kì ngôn ngữ lập trình nào thì việc kiểm tra tính hợp lệ của các dữ liệu input là điều không thể thiếu, đặc biệt khi dữ liệu input đến từ phía người sử dụng thông qua các dạng form. Bài viết này sẽ giới thiệu cho bạn về giải pháp mà Laravel cung cấp cho bạn để thực hiện công việc kiểm tra dữ liệu đầu vào này.Laravel cung cấp cho bạn để thực hiện công việc kiểm tra dữ liệu đầu vào này.

Hướng dẫn php request validation - xác thực yêu cầu php

Vấn đề

Thông thường khi có dữ liệu gửi đến từ phía người dùng ta sẽ phải thực hiện công việc kiểm tra xem dữ liệu đó có thỏa mãn các yêu cầu mà chúng ta đặt ra không trước khi tiến hành xử lý tiếp các công việc khác. Giả sử ta có một form nhập liệu như sau: Khi dữ liệu được gửi lên từ phía client, chúng ta cần kiểm tra xem dữ liệu mà người dùng nhập vào có thỏa mãn một số yêu cầu như sau:

Hướng dẫn php request validation - xác thực yêu cầu php
Khi dữ liệu được gửi lên từ phía client, chúng ta cần kiểm tra xem dữ liệu mà người dùng nhập vào có thỏa mãn một số yêu cầu như sau:

  • Dữ liệu nhập vào không được để trống
  • Dữ liệu nhập vào phải là một số
  • Dữ liệu nhập vào phải lớn hơn 10

Đối với yêu cầu nói trên thì đây là cách kiểm tra dữ liệu có thể nói là "thủ công" khi dùng Laravel:Laravel:

public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}

Như bạn có thể thấy đối với cách làm trên, ta đã có thể kiểm tra được dữ liệu đối với yêu cầu đặt ra. Tuy nhiên đối với cách làm trên, bạn có thể thấy chỉ với duy nhất một field input mà ta cần tốn rất nhiều dòng code để có thể kiểm tra nó. Thử tưởng tượng nếu form của chúng ta có nhiều field hơn thì method của chúng ta sẽ ngày càng trở nên cồng kềnh dẫn đến controller cũng trở nên cồng kềnh theo. Để giải quyết cũng như đơn giản hóa vấn đề này, Laravel cung cấp cho chúng ta một phương pháp khác để có thể kiểm tra dữ liệu một cách ngắn gọn và đơn giản hơn rất nhiều thông qua

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
3 trait nằm ở class
 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
4.Laravel cung cấp cho chúng ta một phương pháp khác để có thể kiểm tra dữ liệu một cách ngắn gọn và đơn giản hơn rất nhiều thông qua
 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
3 trait nằm ở class
 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
4.

Validation trong Laravel

1. Simple request validate

Để hiểu được cách xử dụng của

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
3 trait trong Laravel ta sẽ sử dụng ví dụ với form nhập liệu như sau:Laravel ta sẽ sử dụng ví dụ với form nhập liệu như sau:

Hướng dẫn php request validation - xác thực yêu cầu php
Với các yêu cầu về dữ liệu nhập vào được xét như sau:

  • Tất cả các field không được để trống
  •  public function rules()
     {
          return [
              //   Let's add a few validation rules
               'comment' => 'required|string|max:255',
            ];
    }
    
    6 chỉ gồm các chữ cái và n kí tự thỏa mãn: 4
  •  public function rules()
     {
          return [
              //   Let's add a few validation rules
               'comment' => 'required|string|max:255',
            ];
    }
    
    7 đúng định dạng email
  •  public function rules()
     {
          return [
              //   Let's add a few validation rules
               'comment' => 'required|string|max:255',
            ];
    }
    
    8 gồm tối thiểu 8 kí tự
  •  public function rules()
     {
          return [
              //   Let's add a few validation rules
               'comment' => 'required|string|max:255',
            ];
    }
    
    9 phải giống với
     public function rules()
     {
          return [
              //   Let's add a few validation rules
               'comment' => 'required|string|max:255',
            ];
    }
    
    8

Nếu bạn tham khảo document cho phần validation trong Laravel ta được cung cấp một ví dụ như sau:Laravel ta được cung cấp một ví dụ như sau:

public function store(Request $request)
{
    $validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);
}

Theo như document là Laravel cung cấp, ở đây, ta đang sử dụng chức năng

public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
1 được cung cấp bở class
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
2, nếu các field của chúng ta thỏa mãn các điều kiện theo yêu cầu thì hàm
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
3 sẽ tiếp tục xử lý bình thường. Nếu mộ trong các field không thỏa mã yêu cầu sẽ sinh ra
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
4 đồng thời trả lại lỗi cho người dùng ở dạng phù hợp (có thể dạng
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
5 hoặc
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
6 nếu request trước đó là ajax). Nội dung đoạn code trên được hiểu đơn giản như sau:Laravel cung cấp, ở đây, ta đang sử dụng chức năng
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
1 được cung cấp bở class
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
2, nếu các field của chúng ta thỏa mãn các điều kiện theo yêu cầu thì hàm
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
3 sẽ tiếp tục xử lý bình thường. Nếu mộ trong các field không thỏa mã yêu cầu sẽ sinh ra
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
4 đồng thời trả lại lỗi cho người dùng ở dạng phù hợp (có thể dạng
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
5 hoặc
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
6 nếu request trước đó là ajax). Nội dung đoạn code trên được hiểu đơn giản như sau:

  • Object
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    2 sẽ thực hiện kiểm tra các field từ form mà người dùng nhập với tên field là
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    8 của mảng, VD: với
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    8 là
    Route::post('comment/{comment}');
    
    0 như hình ta thấy ở trên thì thực chất bên HTML sẽ là thẻ input có name tương ứng là
    Route::post('comment/{comment}');
    
    0như sau:
    0
  • Tương tự với các
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    8 còn lại trong mảng mà ta truyền vào hàm
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    1 cũng là
    Route::post('comment/{comment}');
    
    4 của các field mà ta muốn tiến hành kiểm trả dữ liệu
  • Tiếp đến phần
    Route::post('comment/{comment}');
    
    5 ứng với mỗi
    public function authorize()
    {
        $commentId = $this->route('comment');
    
        return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
    }
    
    8 đó chính là những nội dung mà chúng ta cần kiểm tra với field. Cụ thể với field
    Route::post('comment/{comment}');
    
    0, ta có điều kiện:
    1
  • Điều này có nghĩa là với field
    Route::post('comment/{comment}');
    
    0 ta sẽ kiểm tra 3 điều kiện với mỗi điều kiện sẽ cách nhau bởi dấu
    Route::post('comment/{comment}');
    
    9, các điều kiện lần lượt là:
    • required -
      Route::post('comment/{comment}');
      
      0 phải tồn tại trong request gửi lên đồng thời không được để trống
    • unique:posts -
      Route::post('comment/{comment}');
      
      0 nội dung của nó phải là duy nhất đối với bảng
      public function authorize()
      {
          return true;
      }
      
      2
    • max:255 - Độ dài tối đa của
      Route::post('comment/{comment}');
      
      0 tính theo số kí tự là 255 kí tự
  • Đây là các điều kiện có sẵn mà chức năng
    public function authorize()
    {
        return true;
    }
    
    4 trong Laravel cung cấp sẵn cho chúng ta, để có thể tìm hiểu kĩ hơn về các điền kiện kiểm tra này, bạn có thể tham khảo tại đây.Laravel cung cấp sẵn cho chúng ta, để có thể tìm hiểu kĩ hơn về các điền kiện kiểm tra này, bạn có thể tham khảo tại đây.

Để thử nghiệm chức năng trên đối với form của chúng ta, ta sẽ sửa lại đôi chút hàm ban đầu như sau:

2

Với

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
6,
 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
7,
 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
8,
public function authorize()
{
    return true;
}
8 là
Route::post('comment/{comment}');
4 của các input field mà ta đặt bên html. Với đoạn code xử lý kiểm tra dữ liệu như trên, khi ta submit form mà không nhập bất cứ nội dung gì cả, thì đây sẽ là những gì ta thu được:

Hướng dẫn php request validation - xác thực yêu cầu php

Lưu ý : ta nhận được khung đỏ báo lỗi không phải do Laravel tự sinh cho chúng ta mà do chúng ta tạo. Cụ thể sẽ nói rõ trong phần sau. Như bạn có thể thấy, khi chúng ta không nhập dữ liệu gì, đoạn code kiểm tra dữ liệu của chúng ta sẽ thực hiện kiểm trả cả 4 field được nêu ra trong mảng cùng với điều kiện của 4 field đó là

 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
0. Do tất cả các field ta đều để rỗng dẫn đến việc kiểm tra dữ liệu trả về là không chính xác và tự động quay lại (redirect) về form của chúng ta với nội dung báo lỗi như ở khung đỏ trong hình ở trên. Đoạn code trên ta đã đảm bảo được điều kiện thứ nhất trong danh sách các yêu cầu mà chúng ta cần thực hiện là tất cả các field không được để trống. Tiếp theo ta sẽ lần lượt thêm các điều kiện cho mỗi field để hoàn thiện các điều kiện đã đặt ra như sau:Laravel tự sinh cho chúng ta mà do chúng ta tạo. Cụ thể sẽ nói rõ trong phần sau. Như bạn có thể thấy, khi chúng ta không nhập dữ liệu gì, đoạn code kiểm tra dữ liệu của chúng ta sẽ thực hiện kiểm trả cả 4 field được nêu ra trong mảng cùng với điều kiện của 4 field đó là
 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
0. Do tất cả các field ta đều để rỗng dẫn đến việc kiểm tra dữ liệu trả về là không chính xác và tự động quay lại (redirect) về form của chúng ta với nội dung báo lỗi như ở khung đỏ trong hình ở trên. Đoạn code trên ta đã đảm bảo được điều kiện thứ nhất trong danh sách các yêu cầu mà chúng ta cần thực hiện là tất cả các field không được để trống. Tiếp theo ta sẽ lần lượt thêm các điều kiện cho mỗi field để hoàn thiện các điều kiện đã đặt ra như sau:

3

Sau khi thử nhập lại dữ liệu nhưng vẫn vi phạm điều kiện như sau:

Hướng dẫn php request validation - xác thực yêu cầu php

Đây là kết quả mà chúng ta thu được:

Hướng dẫn php request validation - xác thực yêu cầu php

Như bạn thấy, do các field của chúng ta đã vi phạm các điều kiện mới mà chúng ta đặt ra nên sẽ trả lại lỗi đúng như các điều kiện mà nó đã vi phạm. Tuy nhiên trong trường hợp bạn muốn với mỗi field ta sẽ dừng lại không kiểm tra điều kiện tiếp theo nếu điều kiện trước đó lỗi thì ta cần thêm điều kiện

 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
1 ở đầu danh sách điều kiện của mỗi field như sau:

4

Khi đã thêm điều kiện

 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
1 cho mỗi field thì cùng với form nhập liệu lỗi ngay phía trên thì kết quả mà ta thu được cũng sẽ như sau:

Hướng dẫn php request validation - xác thực yêu cầu php

Như bạn thấy

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
6 giờ chỉ báo lỗi do ta nhập cả số và kí tự chứ không còn báo lỗi về số kí tự tối thiểu như trước nữa do khi vi phạm điều kiện
 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
4 thì field này được dừng lại không tiếp tục kiểm tra các lỗi khác nữa. Để thực sử dụng các điều kiện một cách chính xác và hợp lý thì trước khi dùng bạn nên tham khảo lại document để xem cách dùng cũng như những gì đã được hỗ trợ sẵn.

2. Custom validation

Trong trường hợp bạn không muốn dùng hàm

public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
1 được cung cấp bởi class
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
2 và muốn tự mình quyết định khi có lỗi sẽ thực hiện hành động gì hoặc chuyển hướng đi đâu thì thứ bạn cần chính là sử dụng
 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
7 facades. Về cú pháp và cách dùng cùng tương tự như cách làm trên:

5

Lưu ý: bạn sẽ cần phải thêm

 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
8 ở đầu controller để thực hiện chức năng này Ở đây, thay vì ta kiểm tra dữ liệu từ request thì ta sẽ sử dụng
 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
9 và gọi đến chức năng
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
0 với tham số truyền vào đầu tiên là tất cả các field trong request thông qua $request->all() và tham số thứ 2 là mảng chứa các điều kiện cần kiểm tra.
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
1 sẽ chịu trách nghiệm kiểm tra các field sau đó tạo trả về một instance của class
 public function messages()
 {
     return [
         'comment.max' => 'Nội dung bình luận phải có độ dài ngắn hơn 255 kí tự',
     ];
 }
7 và ta sẽ lưu vào biến
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
3. Từ biến này ta có thể gọi đến hàm
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
4 để kiểm tra xem có điều kiện kiểm tra nào không hợp lệ hay không rồi từ đó có thể đưa ra cách xử lý như mong muốn.

3. Form Request Validation

Bằng cách sử dụng 2 phương pháp trên chắc chắn sẽ tiết kiệm cho bạn rất nhiều công sức trong việc kiểm tra dữ liệu người dùng cũng như làm gọn lại function của mình. Tuy nhiên vẫn có những lúc bạn cảm thấy rằng việc thêm dù chỉ là vài dòng code liên quan đến việc kiểm tra dữ liệu người dùng trong function của controller là vẫn dài và hơn nữa controller cũng không cần phải biết đến việc này thì bạn có thể tách việc kiểm tra dữ liệu bằng cách tạo một class riêng cho nó cùng với một hàm kiểm tra cho form tương ứng và gọi nó trong controller của mình, việc đó có thể làm như sau:

6

Ta cũng có thể làm tương tự với

use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
1 Sau đó ta chỉ việc thêm class mới này vào controller bằng cách
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
6 và sau đó sử dụng như sau:

7

Cách làm trên sẽ cho ta kết qua tương tự như ta mong đợi. Tuy nhiên, thay vì phải tự tạo class mới như vậy thì Laravel cung cấp sẵn cho chúng ta một phương pháp tương tự nhưng đơn giản và thậm chí ngắn gọn hơn nhiêu khi sử dụng trong controller đó là sử dụng

use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
7. Để tạo một class riêng cho một form dữ liệu ta dùng lệnh sau trên terminal (command line):Laravel cung cấp sẵn cho chúng ta một phương pháp tương tự nhưng đơn giản và thậm chí ngắn gọn hơn nhiêu khi sử dụng trong controller đó là sử dụng
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
7. Để tạo một class riêng cho một form dữ liệu ta dùng lệnh sau trên terminal (command line):

8

Ở đây ta sẽ sử dụng class là

use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
8 và sau khi thực hiện lệnh trên Laravel sẽ tạo cho chúng ta một folder mới tên là file mới nằm trong folder
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
9 có tên là
public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
0 và có nội dung như sau:Laravel sẽ tạo cho chúng ta một folder mới tên là file mới nằm trong folder
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
9 có tên là
public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
0 và có nội dung như sau:

9

Class này gồm có 2 hàm chính: -

public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
1: dùng để xác định xem người dùng nào có quyền thực hiện request này. Tạm thời chúng ta sẽ không quan tâm đến nó và để nó
public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
2 tương ứng với ai cũng có thể thực hiện request này -
public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
3: đây là nơi định nghĩa quy định cho các field của chúng ta, ta sẽ sửa lại bằng cách copy phần validate ở trên vào đây:

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
0

Cuối cùng ở hàm

public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
4 bên controller ta thay thế
public function authorize()
{
    $commentId = $this->route('comment');

    return Comment::where('id', $commentId)
        ->where('user_id', Auth::id())->exists();
}
2 mặc định truyền vào bằng
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
8 như sau:

 public function rules()
 {
      return [
          //   Let's add a few validation rules
           'comment' => 'required|string|max:255',
        ];
}
1

Lúc này hàm

public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
4 của bạn sẽ được thực hiện khi toàn bộ các điều kiện đối với các filed trong class
use App\Http\Requests\CommentRequest;

public function store(CommentRequest $request)
{
    // logic code
}
8 được thỏa mãn. Vì thể ở hàm này bạn chỉ cần lo code chức năng lưu trữ của nó chứ không còn cần viết phần kiểm tra dữ liệu nữa. Tất nhiền bạn cần thêm
public function store(Request $request)
{
    $input = $request->input('number');

    if ($input == '') {

        return 'Number is required';

    } elseif (!is_numeric($input)) {

        return 'This is not a number, please try again';

    } elseif ((int) $input < 10) {

        return 'Number must greater than 10';

    } else {

        return 'Correct';
    }
}
9 ở dầu controller để sử dụng được class này. Với cách làm này, code bạn đã trở nên tối ưu và ngắn gọn hơn rất nhiều so với phần code khi chúng ta bắn đầu.

Kết bài

Mong ra qua bài viết này bạn hiểu hơn về cách kiểm tra dữ liệu đầu vào từ client do Laravel cung cấp. Bài viết tiếp theo sẽ nói về cách lấy và sử dụng các lỗi sau khi kiểm tra, bạn hãy chú ý đón đọc.Laravel cung cấp. Bài viết tiếp theo sẽ nói về cách lấy và sử dụng các lỗi sau khi kiểm tra, bạn hãy chú ý đón đọc.