01/10/2018, 15:41

Bài 8: Laravel – Cookie

Creating Cookie Cookie có thể được tạo bằng helper toàn cục của Laravel. Nó là một khởi tạo của SymfonyHttpFoundationCookie . Cookie có thể được đính kèm tới response bằng sử dụng phương thức withCookie(). Tạo một response khởi tạo từ class IlliminateHttpResponse để gọi phương thức ...

Creating Cookie

Cookie có thể được tạo bằng helper toàn cục của Laravel. Nó là một khởi tạo của SymfonyHttpFoundationCookie.

Cookie có thể được đính kèm tới response bằng sử dụng phương thức withCookie(). Tạo một response khởi tạo từ class IlliminateHttpResponse để gọi phương thức withCookie(). Cookie được tạo ra bằng Laravel được mã hóa và ký tên đóng mọc đỏ, nên nó không thể bị thay đổi hoặc đọc được từ client.

Đây là một code mẩu cho việc tạo cookie.

//Create a response instance.

$response = new IlluminateHttpResponse(‘Hello World’);

//Call the withCookie() method with the response method

$response->withCookie(cookie(‘name’, ‘value’, $minutes));

//return the response

return $response;

Lưu ý: Khi bạn tạo controller thì mặc định Laravel đã đưa sẳn cho bạn một vài đối tượng bằng cách sử dụng keywork “use”. Nếu các bạn đã biết về namespace và use thì đoc lướt phần diễn giải này cho vui. Ở đây mình sẽ nói tóm gọn để các bạn chưa biết nắm được.

Từ php 5.3 trở đi thì đã hổ trợ namespace và use, mặc dù 2 khái niệm này đã có từ lâu ở các ngôn ngữ lập trình như java, .net. Namespace giúp bạn có thể định nghĩa được những class cùng tên, nó cũng giống như là một alias path, thay vì bạn phải include/require chúng vào thì khi định nghĩa ở những class đó, bạn cho nó 1 namespace, và sử dụng ở những nơi khác bằng keywork ‘use’. Chỉ đơn giản vậy thôi.

Trong controller bạn có thấy mặc định Laravel đưa vào use IlluminateHttpRequest;

Đấy là cho ta sử đụng được class Request và sử dụng class này như một Defendency Injection trong các phương thức của controller.

Quay lại phần code mẩu bạn đã thấy cú pháp tạo một cookie. Phương thức Cookie() có 3 đối số. Đối số đầu tiên là tên của cookie, thứ 2 là giá trị của cookie và thứ 3 là thời gian tồn tại của cookie.

Cookie có thể đặt mãi mãi bằng cách sử dụng phương thức forever như sau:

$response->withCookie(cookie()->forever(‘name’, ‘value’));

Retrieving Cookie

Một khi chúng ta set cookie, chúng ta có thể lấy cookie bằng hàm cookie(). Hàm này sẽ chỉ cần 1 đối số đó là tên của cookie. Phương thức cookie có thể được gọi từ IlliminateHttpRequest. Do vậy không quên ‘use’ nó vào nhé. Những cái đám này thì gọi là “global helper” và bạn có thể can thiệp, còn core Laravel tuyệt đối không đụng tới nhé. Nhưng theo kinh nghiệm của tôi thì những thứ có sẳn chúng ta không sữa đổi mà hãy tạo cái khác rồi sử dụng. Có chuyện xãy ra thì cũng không đổ thừa nhau được hehe.

Đây là code mẩu lấy cookie

//’name’ is the name of the cookie to retrieve the value of

$value = $request->cookie(‘name’);

Example

Step 1 : tạo controller CookieController

php artisan make:controller CookieController

Step 2: copy/paste code sau vào CookieController.php

namespace AppHttpControllers;

use IlluminateHttpRequest;

use IlluminateHttpResponse;

use AppHttpRequests;

 class CookieController extends Controller {

   public function setCookie(Request $request){

      $minutes = 1;

      $response = new Response(‘Hello World’);

      $response->withCookie(cookie(‘name’, ‘ku tin’, $minutes));

      return $response;

   }   

   public function getCookie(Request $request){ 

     $value = $request->cookie(‘name’);

      echo $value;

   }

}

Để ý dòng tô màu đỏ, chính là cái namespace chúng ta đưa vào khi mặc định tạo controller chưa có. Cookie cần instance of của Respone/Request để tạo và lấy đó mà.

Step 3: định tuyến

Route::get(‘/cookie/set’,’CookieController@setCookie’);

Route::get(‘/cookie/get’,’CookieController@getCookie’);

Step 4: chạy http://localhost:8000/cookie/set

Step 5: output:

bai7_set_cookie

Step 6: chạy lấy cookie http://localhost:8000/cookie/get

Step 7: output:

bai7_get_cookie

Step 8: hãy tắt trình duyệt và chạy lại step 7 để thấy cookie đã tồn tại và được set. Rồi bạn có thể chờ sau 1 phút chạy lại thì cookie đã bị hết hạn.

Rồi ok. Cũng dể sử dụng phải không các bạn.

Bài tập:

Trong phương thức setCookie chúng ta đã sử dụng Injecting Request nhưng trong thân hàm không có sử dụng tới, mà lại tốn khởi tạo Respone, có j đó không đúng với tinh thần Dependency Injection. Do vậy bạn hãy cải tiến lại chức năng này, không dùng New Response.

0