07/09/2018, 17:41

Bài 18: Form Request trong Larvel

-Sau khi đã giới thiệu với các bạn về model, controller,.. thì tiếp đến ở bài này mình sẽ giới thiệu về Form Request một thứ không thể thiếu trong một framwwork. -Và để bắt đầu chúng ta cần tạo cho nó một view. 1,Tạo View. -Đầu tiên mình sẽ tạo ra một view FormRequest.blade.php có nội dung ...

-Sau khi đã giới thiệu với các bạn về model, controller,.. thì tiếp đến ở bài này mình sẽ giới thiệu về Form Request một thứ không thể thiếu trong một framwwork.

-Và để bắt đầu chúng ta cần tạo cho nó một view.

1,Tạo View.

-Đầu tiên mình sẽ tạo ra một view FormRequest.blade.php có nội dung như sau:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Test form</title>
    <link rel="stylesheet" href="">
</head>
<body>
    <form action="{{ url('handle-form') }}" method="POST" role="form">
        <legend>Test submit form</legend>
        {{ csrf_field()}}
        <div class="form-group">
            <label for="">label</label>
            <input type="text" name="name" class="form-control" id="" placeholder="Input field">
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</body>
</html>

-Ở đây mình có tạo ra một form có một trường name input, một button submit và một action {{ url('handle-form') }} (action này nó sẽ có chức năng gọi đến đường dẫn yourdomain.com/handle-form ).

Chú ý: đối với Laravel khi xử lý form thì bắt buộc phải có csrf_token (tránh tấn công xss) nếu không thì sẽ không thực hiện được submit form được. Để tạo csrf_token cho form chúng ta có 2 cách sau:

  • Dùng: {{ csrf_field() }}
  • Dùng: <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> hoặc <input type="hidden" name="_token" value="{{ csrf_token() }} ?>"> đối với blade template.

2,Tạo controller.

-Tiếp theo mình lại tạo thêm một handleController để xử lý Reuqest.

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class handleController extends Controller
{
    public function getForm(){
    	return view('test');
    }
    public function handleRequest(Request $request){
    	return $request->all();
       // nhan het du lieu co trong form
    }
}

-Ở trên mình có tạo ra 2 function:

  • getForm: để hiển thị view FormRequest.blade.php ở trên.
  • handleRequest: để xử lý nhận dữ liệu của form.

=>Chú ý:  Để nhận dữ liệu từ form được thì chúng ta cần phải truyền vào hàm nhận một lớp Request.(Nói ở phần dưới).

3,Tạo Route.

-Sau khi đã tạo xong View vào Controller giờ mình sẽ tạo tiếp 2 Route để hiện view và xử lý dữ liệu.

Route::get('get-form',['uses'=> '[email protected]']);
Route::post('handle-form',['uses'=> '[email protected]']);

-Cái này thì mình không giải thích nữa nhé (ai không hiểu xem lại route ).

4,Các hàm xử lý request.

-Trong Laravel hỗ trợ chúng ta rất mạnh về xử lý nhận dữ liệu từ form. Nên trong bài này mình sẽ không thể nêu hết các phương thức, thuộc tính mà Laravel hỗ trợ được, mình sẽ nêu ra các phương thức, thuộc tính hay dùng thôi.

Lấy hết dữ liệu của form.

-Để hết dữ liệu của form gửi lên thì Laravel. thì mọi người sử dụng phương thức all().

VD: đối với view trên mọi người sẽ nhận như sau.

public function handleRequest(Request $request){
    	return $request->all();
       // nhan het du lieu co trong form
    }

Lấy dữ liệu theo name định sẵn.

-Để lấy dữ liệu của name định sẵn các bạn sử dụng cú pháp:

$request->input('inputname');

Hoặc

$request->inputname;
  • Chú thích: inputName là name của input các bạn đặt ở form.

VD: Mình sẽ lấy giá trị của name='name' ở trong view trên như sau:

public function handleRequest(Request $request){
    	return $request->input('name');
    }

Lấy dữ liệu của nhiều name.

Cú Pháp:

public function handleRequest(Request $request){
    	return $request->input('name','password');
    }

-Hàm này cho phép lấy giá trị của nhiều name và trả về dữ liệu mảng.

Kiểm tra phương thức gửi của form.

-Laravel có cung cấp luôn cho chúng ta hàm kiểm kiểu submit của form là GET,POST,.. Cú pháp xử lý như sau:

public function handleRequest(Request $request){
    	return $request->isMethod('post');
    }

-phương thức này trả về kiểu giá trị boolean (true,false);

Lấy path của form.

-Cú Pháp:

public function handleRequest(Request $request){
    	return $request->path();
    }

-Hàm này cho phép chúng ta lấy đường dẫn tới form.

VD: http://domain.com/form/submit/

Giới hạn đường dẫn gửi form.

Cú Pháp:

public function handleRequest(Request $request){
    	return $request->is('something');
    }

-Hàm này có tác dụng giới hạn các url được chấp nhận gửi form.

VD: chỉ muốn nhận dữ liệu từ đường dẫn có path bắt đầu bằng admin

public function handleRequest(Request $request){
    	if($request->is('admin/*')){
                // code
           }
    }

Sử dụng collections trong form.

-Với sự hỗ trợ mạnh mẽ của Laravel thì các bạn cũng có thể sử dụng collection trong Form Request.

VD:

$input = $request->only(['username', 'password']);

$input = $request->only('username', 'password');

$input = $request->except(['credit_card']);

$input = $request->except('credit_card');

3, Lời kết.

-Phần trên mình đã giới thiệu với mọi người về Form Request trong Laravel rồi, tuy nó chỉ là lý thuyết nhưng nó sẽ là nền tảng cho bạn khi làm việc với Laravel về sau.

0