Tìm hiểu về Form/HTML trong Laravel 5

Hôm nay mình sẽ hướng dẫn cách bạn cách cài đặt và sử dụng Form/HTML trong Laravel 5.

Cách cài đặt gói service HtmlServiceProvider

Như các bạn đã biết. Trong Laravel 4 có hỗ trợ sẵn Form/HTML. Nhưng để sử dụng được ở Laravel 5 thì chúng ta cần phải cài đặt 1 package HtmlServiceProvider, vì laravel 5 ban đầu khi cài đặt chưa tích hợp ó vào. Gói HtmlServiceProvider cung cấp các phương thức đã xây dựng sẵn giúp chúng ta thao tác với form 1 cách dễ dàng hơn trong blade. Để cài đặt, cách bạn có thể thêm 1 dòng vào file composer.json </br></br>

"require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "laravelcollective/html": "^5.1"
    },

Sau đó các bạn vào terminal và chạy lệnh .

composer dumpautoload

Tiếp theo, bạn mở file ```config/app.php``` và tìm đến dòng chứa các provider và thêm 1 dòng vào:

  'providers' => [
    // ...
    'Collective\Html\HtmlServiceProvider',
    // ...
  ],

Cuối cùng, các bạn thêm 2 aliases mới vào phần aliases như sau:

  'aliases' => [
    // ...
      'Form' => 'Collective\Html\FormFacade',
      'Html' => 'Collective\Html\HtmlFacade',
    // ...
  ],

Vậy là chúng ta đã có thể sử dụng Form/HTML trong blade của Laravel 5 được rồi đấy.

Cách sử dụng

Để tạo 1 form, các bạn sử dụng cú pháp Form::open()Form::close() để đóng 1 form lại như sau:

{!! Form::open(array('url' => 'foo/bar', 'method' => 'PUT')) !!}
{!! Form::close() !!}

Bạn cũng có thể mở các Form sử dụng tên route được định nghĩa trong file app/routes.php hoặc controller actions:

{!! Form::open(['route' => 'route.name']) !!}
{!! Form::close() !!}
{!! Form::open(['action' => '']) !!}
{!! Form::close() !!}

Mặc định, khi khởi tạo Form sẽ có phương thức là POST, tuy nhiên các bạn cũng có thể thay đổi điều đó bằng cách truyền vào trong Form phương thức mà các bạn muốn sử dụng thông qua biến 'method'.

Các bạn có thể tìm hiểu thêm các cú pháp khác "tại đây":. Hoặc xem list cú pháp "tại đây": . </br></br> CSRF protection

Thêm 1 CSRF token vào 1 Form. Laravel cung cấp 1 phương thức đơn giản để bảo vệ ứng dụng web của bạn từ cross-site request forgeries (CSRF). Đầu tiên, nó đặt ngẫu nhiên 1 token vào trong session của user. Nếu bạn sử dụng Form::open với phương thức POST, PUT hoặc DELETE, CSRF token sẽ được tự động thêm vào form của bạn trong hidden field. Ngoài ra, nếu bạn muốn tạo ra HTML cho hidden CSRF field, bạn có thể sử dụng token method:

Route::post('profile', array('before' => 'csrf', function()
{
    //
}));

**File upload trong Laravel 5**

Có 2 cần chú ý khi bạn muốn upload file trong Laravel.

  • Trong phương thức Form::open() cần phải set 'file' => true'. Điều này làm cho các form data sẽ được mã hóa dưới dạng 'multipart/form-data'.
  • Form::file() được sử dụng để kiểm soát các tập tin tải lên.

Cú pháp như sau:

{!! Form::open(array('url' => 'foo/bar', 'file' => true)) !!}
    // ...
    {!! Form::file('file', array('class' => 'name')) !!}
    // ...
{!! Form::close() !!}

Bạn hãy thử cả 2 trường hợp ko sử dụng ```'file' => true``` và có sử dụng, sau đó dump biến ```$request->file``` trong file controller. Bạn sẽ thấy sự khác biệt :D.

Lấy giá trị từ Form

Ở đây mình có một ví dụ nhỏ, các bạn mở 1 form và cho nó trỏ đến 1 action trong Controller như sau:

{!! Form::open(['action' => '']) !!}
{!! Form::close() !!}

và function store trong Controller sẽ có dạng như sau:

public function store(Request $request)
{
    dump($request->all());
}

Để lấy được toàn bộ thông tin input từ form, các bạn sử dụng $request->all(). Ngoài ra, các bạn cũng có thể lấy được thông tin từng field trong form bằng cách sử dụng $request->nameField().

Thật đơn giản phải không các bạn.  Trên đây là toàn bộ nhữn giừ mình muốn giới thiệu với các bạn về Form/HTML trong Laravel 5. Hy vọng nó sẽ giúp ích được gì đó cho các bạn.