Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Trong Codeigniter Framework nó chia ra 2 khái niệm đó là helper & library, vậy câu hỏi đặt ra ở đây. Helper nó là cái gì ? nó là những function được xây dựng sẵn nhầm hỗ trợ lập trình viên trong quá trình xây dựng ứng dụng website bằng nền tảng CI, có rất là nhiều helper được khởi tạo sẵn. Vậy library khác helper ở điểm nào, xin thưa rằng library được viết dựa trên những cái class dùng để định nghĩa các phương thức và thực thi các hành động ở bên trong lớp đó, dĩ nhiên nó khác biệt với helper là với helper chúng ta có thể gọi nó ở bất cứ nơi đâu và tùy ý sử dụng nó, ví dụ như gọi ra list menu ngay trong view chẳng hạn. Hai helper mà các bạn sẽ sử dụng nhiều nhất chính là form & url

Load Helper

Cũng giống như library, để có thể sử dụng tất cả các hàm trong các helper thì việc đầu tiên chúng ta phải gọi chúng ra, và dĩ nhiên là phải gọi ngay constructor trong controller để có thể tái sử dụng helper đó với toàn bộ action, có 2 cách để load helper, từ đó chúng ta hoàn toàn có thể gọi các hàm ở ngay controller và view một cách dễ dàng.

1
2
$this->load->helper('url');
$this->load->helper(array('url', 'form'));

Url Helper

Trong helper này có rất là nhiều phương thức, nhưng không phải cái nào là cũng xài đâu nhé, bản thân framework nó rất là nặng, cho nên vì thế tôi khuyên các ban chỉ nên dùng vài phương thức sau đây.

  1. base_url(): Chỉ định đường dẫn tuyệt đối, khai báo trong file config.php.
  2. site_url(): Nó gần giống với base_url./li>
  3. anchor(): Khai báo một đường link -> echo anchor(‘news/local/123′, ‘My News’, ‘title=”News title”‘).
  4. url_title(): Hỗ trợ Url Friendly dạng hom-nay-troi-co-mua.
  5. redirect(): Hỗ trợ chuyển sang một trang được chỉ định.

Trong CI chúng ta sẽ phải làm việc với router và khi phải làm việc với nó thì tất cả các đường dẫn sẽ đươc rewrite dưới dạng thư mục hoặc file, nếu chúng ta không chỉ định ra một đường dẫn tuyệt đối thì sẽ không thể nào định nghĩa được những đường dẫn của thư mục images & css. Tránh lạm dụng phương thức trong helper vì làm như thế sẽ khiến ứng dụng website của các bạn chạy rất là chậm, bình thường tôi chỉ dùng 2 phương thức redirect & base_url để làm tốt công việc cấu hình đường dẫn tuyệt đối , chuyển trang khi tôi thao tác xong một hành động nào đó.

Form Helper

Đây là một helper cũng khá là hay nó giúp các bạn nhanh chóng tạo ra các form dùng để nhập liệu một cách nhanh chóng, đọc cái user guide của nó cũng khiến tôi phải chóng mặt vì nó khá là rối và khó hình dung, tôi cũng phải mất vài ngày mói tìm hiểu xong nó nhưng theo quan điểm của tôi, hãy sử dụng nó tùy lúc thôi nhé, còn không cứ dùng html mà tạo form bình thường thôi tại sao tôi lại nói vậy, hãy đọc tiếp bài viết tự các bạn sẽ hiểu.

Tôi sẽ tạo ra môt controller tên là form, gọi helper url & form ra nhé, vì giờ đang tìm hiểu cách sử dụng nó mà. Do chúng ta gọi một lần 2 helper nên tôi sử dụng cách 2 để tiến hành gọi helper, chúng ta sẽ gọi các phương thức trong form helper ngay trong phần view, trước khi bắt đầu ví dụ này tôi sẽ liệt kê nhưng phương thức mà chúng ta sắp sử dụng.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Form extends CI_Controller{
      public function __construct(){
          parent::__construct();
          $this->load->helper(array('url', 'form'));
      }
  
     public function index(){
         $this->load->view("form");
      }
}
?>


form_open: Mở thẻ form.
form_close: Đỏng thẻ form.
form_input: Tạo thẻ input với type là text.
form_label: Tương đương với thẻ label trong html.
form_password: Thẻ input với type là password.
form_upload: Thẻ input với tyle là file
form_textarea: Thẻ textarea.
form_dropdown: Thẻ select option trong form.
form_radio: Thẻ tạo nút chọn trong form.
form_submit: Thẻ input với type là submit.
form_fieldset: Thẻ mở fieldset trong form.
form_fieldset_close: Thẻ đóng fieldset trong form.

Có rất nhiều cách tạo ra form cũng như khai báo thông số cho nó, nhưng cách tôi muốn các bạn nên sử dụng chính là tạo ra một cái mảng và chứa các thông số cho tiện. ví dụ tôi tạo ra một form input với name là kaito, value là freetuts.net thì trong CI nó chỉ chúng ta viết như sau,giả sử tôi muốn size là 25, id với style là gì gì đó thì chẳng lẽ phải viết dài dòng sao, thay vì viết dài dòng thì tôi sẽ hứng tất cả thông số trong một cái mảng, sau đó truyền $tenbien vào trong form_input là xem như xong. Các bạn có thể xem đoạn code phía dưới và sẽ dễ dàng hình dung ra được cách khai báo các phương thức trong form helper, và bản thân tôi thì thấy nó phức tạp quá, tôi thích sự đơn giản và chung thủy nên cứ html mà làm tới thôi :D , viết kiểu này cũng hay và oách nên tùy lúc sử dụng thôi nhé, lạm dụng là vào viện đấy.

1
echo form_input('kaito', 'freetuts.net')


Full Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
$user=array(
    "name" => "username",
    "size" => "25",
);
$pass=array(
    "name" => "pass",
    "size" => "25",
);
$email=array(
    "name" => "email",
    "size" => "25",
);
$gender1=array(
    "name" => "gender",
    "value" => "m",
    "checked" => TRUE,
);
$gender2=array(
    "name" => "gender",
    "value" => "f",
);
$opt=array(
    "1" => "Viet Nam",
    "2" => "Cambodia",
    "3" => "Malaysia",
);
$note=array(
    "name" => "note",
    "cols" => "40",
    "rows" => "5",
);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>freetuts.net</title>
</head>
   
<body>
 <?php
    echo form_open(base_url()."index.php/form/index");
    echo form_fieldset("Member Register");
    echo form_label("Fullname: ").form_input($user)."<br />";
    echo form_label("Password: ").form_password($pass)."<br />";
    echo form_label("Email: ").form_input($email)."<br />";
    echo form_label("Gender: ").form_radio($gender1)."Male".form_radio($gender2)."Female<br />";
    echo form_label("Country: ").form_dropdown("Country: ", $opt, 1)."<br />";
    echo form_label("Note: ").form_textarea($note)."<br />";
    echo form_label(" ").form_submit("ok""Register");
    echo form_fieldset_close();
    echo form_close();
 ?>
</body>
</html>

Chạy code trên và viewsource để cảm nhận được sự huyền diệu của form helper.

Các Helper thông dụng

Tôi sẽ liệt kê một số helper mà lâp trình viên hay sử dụng trong quá trình làm việc với CI, và khuyến cáo là các bạn chỉ nên tìm hiểu cho biết chứ đừng lạm dụng nó nhé, bản thân CI nó đã khá là chậm nên hãy tìm cách tối ưu nó chứ đừng làm nó chạy chậm thêm bằng việc nhồi nhét các helper.


CAPTCHA Helper
Date Helper
Download Helper
Email Helper
HTML Helper
Language Helper
Security Helper
Text Helper
String Helper


Hãy sử dụng helper đúng cách và đúng lúc, hãy thông minh khi làm việc với bất cừ Framework nào, trong loạt bài tới tôi sẽ hướng dẫn các bạn cách tự xây dựng một helper trong CI.

Kết:

Mọi thứ nên bắt đầu từ những điều đơn giản và đừng làm nó phức tạp hơn, đó chính là những gì mà tôi muốn nhẳn nhủ với các bạn thông qua bài viết này, tôi không cấm các bạn sử dụng helper , nhưng hãy sử dụng nó một cách hợp lý và hiệu quả, bài viết này tôi không diễn đạt code quá nhiều vì cách sử dụng form helper nó rất là đơn giản, user guide của nó viết thì thấy rối vậy thôi. Tôi tìm hiểu và đúc kết ra được vài cách và cách trên là cách tối ưu nhất mà các lập trình viên hay sử dụng.