Mọi thứ bạn cần để khởi đầu với CodeIgniter
() translation by (you can also view the original English article)
CodeIgniter là một framework ứng dụng web cho PHP. Nó cho phép các nhà phát triển xây dựng các ứng dụng web nhanh hơn và cung cấp nhiều thư viện mã nguồn và các helper nhằm tăng tốc các tác vụ tẻ nhạt trong PHP. CodeIgniter hoạt động trên một thiết kế mô-đun; nghĩa là bạn có thể triển khai các thư viện cụ thể theo ý của bạn - điều này tăng tốc cho framework. Bài hướng dẫn này sẽ cố gắng chỉ cho bạn những điều cơ bản khi thiết lập framework, bao gồm cách xây dựng một ứng dụng hello world cơ bản thông qua tiếp cận MVC.
Tại sao cần một framework?



Các framework cho phép cấu trúc việc phát triển các ứng dụng bằng cách đề xuất các class và function có thể sử dụng lại để có thể giảm đáng kể thời gian phát triển. Một số nhược điểm của các framework là chúng cung cấp các class không mong muốn, làm phình to code khiến ứng dụng khó điều hướng hơn.
Tại sao dùng CodeIgniter?



CodeIgniter là một framework rất gọn, hữu hiệu. Khi nó hoàn hảo cho người mới bắt đầu (bởi vì
quá trình học biết ít), Codeigniter cũng hoàn hảo cho các ứng dụng web lớn và có yêu cầu khắt khe. CodeIgniter được phát triển bởi EllisLab và có tài liệu
thấu đáo, dễ hiểu. Dưới đây là danh sách lý do khiến CodeIgniter trở thành một framework thông minh dễ sử dụng?
- Dung lượng nhỏ với hiệu năng xuất sắc
- Phương pháp MVC trong phát triển (mặc dù nó đổi lấy sự linh hoạt bằng tính lỏng lẻo)
- Tạo URL gọn thân thiện với công cụ tìm kiếm
- Dễ dàng mở rộng
- Chạy trên cả PHP 4 (4.3.2+) và 5
- Hỗ trợ cho hầu hết các database lớn bao gồm MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite,
và ODBC. - Bảo mật ứng dụng được xem là trọng tâm
- Thao tác triển khai bộ nhớ đệm dễ dàng
- Nhiều thư viện và helper để giúp bạn thực hiện các tác vụ phức tạp cho email, hình ảnh,
xác thực form, upload file, quản lý session, các ứng dụng đa ngôn ngữ và tạo apis cho ứng dụng - Đa số các thư viện chỉ được tải khi cần thiết để cắt giảm tài nguyên cần thiết
Tại sao dùng MVC?



Với người mới bắt đầu, MVC là viết tắt của Model, View, Controller. Nó là một model lập trình được sử dụng cho việc phát triển
ứng dụng web. Pattern này tách biệt giao diện người dùng và phần back-end (ví dụ như tương tác database với nhau. Một triển khai
thành công cho phép các nhà phát triển sửa đổi giao diện người dùng hoặc back-end của họ mà không ảnh hưởng đến
phần khac. MVC giúp tăng tính linh hoạt của một ứng dụng bằng cách có thể sử dụng lại các mode hoặc view
lần nữa). Dưới đây là mô tả về MVC.
- Model: xử lý tương tác data thô (raw data) và database và sẽ có các function.
như thêm bản ghi vào database hoặc chọn bản ghi database cụ thể. Trong CI thì model là
thành phần là không cần thiết và có thể được bao gồm trong controller. - View: liên quan đến phần hiển thị các data và điều khiển giao diện cho người dùng.
Trong CI, view có thể là một website, rss feed, data ajax hoặc bất kỳ "trang" nào khác. - Controller: hoạt động trung gian giữa view và model và, như tên gọi,
nó kiểm soát những thứ được gửi đến view từ model. Trong CI, controller cũng là nơi để tải các thư viện và helper.
Một ví dụ về phương pháp MVC sẽ dành cho form liên hệ.
- Người dùng tương tác với view bằng cách nhập vào form và gửi đi.
- Controller nhận data POST từ form, controller gửi data này đến model
để cập nhật trong database. - Sau đó model gửi kết quả của database đến controller.
- Kết quả này được cập nhật trong view và hiển thị cho người dùng.
Có vẻ như rất nhiều việc cần làm. Nhưng tin tôi đi; khi bạn đang làm việc với một ứng dụng lớn, việc có thể sử dụng lại các model hoặc view giúp tiết kiệm rất nhiều thời gian.
Bước 1: Tải về CodeIgniter
Để bắt đầu, bạn sẽ cần download CodeIgniter và upload nó lên máy chủ của mình. Điều hướng trình duyệt của bạn
đến https://www.codeigniter.com/ và
nhấp vào nút download. Trong hướng dẫn này, chúng tôi đang sử dụng phiên bản 1.70.

Bước 2: Cài đặt và khám phá CodeIgniter
Khi bạn đã download CodeIgniter, tất cả những gì bạn cần làm là giải nén và đổi tên thư mục "CodeIgniter_1.7.0" thành
tên ứng dụng hoặc, trong trường hợp này là "ci" và upload lên máy chủ có hỗ trợ PHP và MySQL của bạn.
Bây giờ trên máy chủ của bạn, tôi sẽ giải thích tất cả các thư mục và file dành cho:

- Thư mục system chứa tất cả các file giúp CI vận hành.
- Thư mục application gần giống với nội dung của thư mục system
thư mục này là để người dùng có thể chứa các file dành riêng cho ứng dụng đó, ví dụ nếu một
người dùng chỉ muốn tải một helper trong một ứng dụng, anh ta sẽ đặt nó vào thư mục system/application/helpers
thay vì thư mục system/helpers.- Thư mục config lưu trữ tất cả các file cấu hình có liên quan đến ứng dụng. Thư mục này
bao gồm thông tin về những thư viện mà ứng dụng nên tự động tải và thông tin về database. - Thư mục controllers lưu trữ tất cả các controller cho ứng dụng.
- Thư mục errors lưu trữ tất cả các trang mẫu về lỗi cho ứng dụng. Khi
một lỗi xảy ra thì trang lỗi được tạo từ một trong các mẫu này. - Thư mục helpers lưu trữ tất cả các hỗ trợ dành riêng cho ứng dụng của bạn.
- Thư mục hook dành cho hook giúp sửa đổi chức năng của các file core của CI,
hooks chỉ nên được sử dụng bởi người dùng CI có kinh nghiệm - Thư mục language lưu trữ các dòng văn bản có thể được tải thông qua thư viện ngôn ngữ
để tạo các website đa ngôn ngữ. - Thư mục libraries lưu trữ tất cả các thư viện dành riêng cho ứng dụng của bạn.
- Thư mục models lưu trữ tất cả các model cho ứng dụng.
- Thư mục views lưu trữ tất cả các view cho ứng dụng.
- Thư mục config lưu trữ tất cả các file cấu hình có liên quan đến ứng dụng. Thư mục này
- Thư mục cache lưu trữ tất cả các cache do thư viện caching tạo ra.
- Thư mục codeigniter lưu trữ tất cả các phần giúp cho CI hoạt động.
- Thư mục database lưu trữ tất cả các database driver và class cho phép bạn
kết nối với database. - Thư mục fonts lưu trữ tất cả các font có thể được sử dụng bởi thư viện thao tác hình ảnh.
- Thư mục helpers lưu trữ tất cả các core helper của CI nhưng bạn có thể thiết lập các helper của riêng mình
ở đây, chúng có thể được truy xuất bởi tất cả các ứng dụng của bạn. - Thư mục language lưu trữ tất cả các file ngôn ngữ gốc của CI cho librarie và helper
sử dụng. Bạn cũng có thể thiết lập các thư mục language của riêng mình mà tất cả các ứng dụng của bạn có thể truy xuất. - Thư mục libaries lưu trữ tất cả các thư mục core của CI nhưng bạn có thể thiết lập libraries của riêng mình
ở đây, chúng có thể được truy xuất bởi tất cả các ứng dụng của bạn - Thư mục logs lưu trữ tất cả các log được CI tạo ra.
- Thư mục plugin lưu trữ tất cả các plugin mà bạn có thể sử dụng. Các plugin gần như giống hệt
với các helper, plugin là các hàm được cộng đồng chia sẻ. - Thư mục scaffolding lưu trữ tất cả các file làm cho class scaffolding hoạt động.
Scaffolding cung cấp giao diện CRUD thuận tiện để truy xuất thông tin trong database của bạn
suốt quá trình phát triển.
- Thư mục application gần giống với nội dung của thư mục system
- user_guide chứa hướng dẫn sử dụng cho CI.
- File index.php là bit thực hiện tất cả các chức năng kỳ diệu của CI và cho phép bạn thay đổi
tên của các thư mục system và application.
Bước 3: Cấu hình CodeIgniter
Khởi động CI khá đơn giản. Hầu hết bạn chỉ cần chỉnh sửa vài cấu hình
các file.
Bạn cần thiết lập CI để trỏ đến base URL đúng của ứng dụng. Để làm điều này, hãy mở system/application/config/config.php và
chỉnh sửa mảng base_url để trỏ đến server và thư mục CI của bạn.
1 |
$config['base_url'] = "http://localhost/ci/"; |
Bước 4: Kiểm tra CodeIgniter
Chúng tôi sẽ làm một test nhanh để xem CI có hoạt động hay không. Truy cập http://localhost/ci/ và bạn
sẽ thấy điều sau đây
Bước 5: Cấu hình CodeIgniter Cont.
Nếu bạn sẵn sàng, chúng ta nên hoàn tất phần cấu hình. Chúng tôi đang bắt đầu định cấu hình cụ thể cho ứng dụng hellowworld của chúng tôi. Nếu bạn muốn sử dụng database với ứng dụng của mình, (trong hướng dẫn này, chúng tôi sẽ làm.) mở lên system/application/config/database.php và xét giá trị phù hợp cho mảng items. Code này kết nối với MySQL
database được gọi là "hellowworld" trên localhost với username là "root" và password là "root".
1 |
$db['default']['hostname'] = "localhost"; |
2 |
$db['default']['username'] = "root"; |
3 |
$db['default']['password'] = "root"; |
4 |
$db['default']['database'] = "helloworld"; |
5 |
$db['default']['dbdriver'] = "mysql"; |
Ngoài ra, vì chúng tôi sẽ sử dụng database khá nhiều, chúng tôi muốn nó tự động tải để chúng tôi không
phải cụ thể tải mỗi khi chúng tôi kết nối. Mở file system/application/config/autoload.php
và thêm 'database' vào mảng autoload libaries.
1 |
$autoload['libraries'] = array('database'); |
Hiện tại, thiết lập CI sẽ có controller mặc định gọi là "welcome.php"; bạn có thể tìm thấy controller này trong thư mục system/application/controllers. Trong hướng dẫn này, hãy xóa nó và mở file system/application/config/route.php của bạn. Thay đổi mục array mặc định để trỏ đến controller "helloworld".
1 |
$route['default_controller'] = "Helloworld" |
CI cũng có một file xem mà chúng tôi không cần. Mở thư mục system/application/view
và xóa file welcome_message.php.
Bước 6: Tạo database Hellowworld
Vì đây không thực sự là một hướng dẫn về MySQL, tôi sẽ duy trì mọi thứ đơn giản. Tạo một database gọi là "hellowworld" và
chạy câu SQL thông qua phpMyAdmin (hoặc máy khách MySQL tương tự).
1 |
CREATE TABLE `data` ( |
2 |
`id` int(11) NOT NULL auto_increment, |
3 |
`title` varchar(255) NOT NULL, |
4 |
`text` text NOT NULL, |
5 |
PRIMARY KEY (`id`) |
6 |
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; |
7 |
|
8 |
INSERT INTO `data` (`id`, `title`, `text`) VALUES(1, 'Hello World!', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla |
9 |
sapien eros, lacinia eu, consectetur vel, dignissim et, massa. Praesent suscipit nunc vitae neque. Duis a ipsum. Nunc a erat. Praesent
|
10 |
nec libero. Phasellus lobortis, velit sed pharetra imperdiet, justo ipsum facilisis arcu, in eleifend elit nulla sit amet tellus.
|
11 |
Pellentesque molestie dui lacinia nulla. Sed vitae arcu at nisl sodales ultricies. Etiam mi ligula, consequat eget, elementum sed,
|
12 |
vulputate in, augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;'); |
Bước 7: Tạo model Hellowworld
Model là tùy chọn trong CI, nhưng đó là thực hành tốt nhất để sử dụng chúng. Chúng chỉ là các class PHP có chứa
các hàm làm việc với thông tin từ database. Tiếp tục
tạo một file helloworld_model.php
trong thư mục system/application/models
Trong file này, tạo một class Helloworld_model, Helloworld_model cấu trúc và một hàm có tên getData.
Trong hàm getData, chúng ta
sẽ sử dụng các hàm của database Active Record để tăng tốc thời gian phát triển database khi làm việc
với CI và database. Về cơ bản, chúng là các hàm đơn giản hóa để tạo các câu truy vấn.
1 |
<?php
|
2 |
class Helloworld_model extends Model { |
3 |
|
4 |
function Helloworld_model() |
5 |
{
|
6 |
// Call the Model constructor
|
7 |
parent::Model(); |
8 |
}
|
9 |
|
10 |
function getData() |
11 |
{
|
12 |
//Query the data table for every record and row
|
13 |
$query = $this->db->get('data'); |
14 |
|
15 |
if ($query->num_rows() > 0) |
16 |
{
|
17 |
//show_error('Database is empty!');
|
18 |
}else{ |
19 |
return $query->result(); |
20 |
}
|
21 |
}
|
22 |
|
23 |
}
|
24 |
?>
|
Bước 8: Tạo controller Hellowworld
Hãy tạo controller sẽ hiển thị view và tải model. Theo cách đó, khi
bạn truy xuất địa chỉ http://localhost/ci/index.php/helloworld/, bạn sẽ thấy data từ database.
Trong hệ thống system/application/controllers, hãy tạo một file có tên helloworld.php.
Trong file mới này, chúng tôi sẽ tạo một class có cùng tên với file.
Trong class này, bạn cần tạo một hàm gọi là "index". Đây là hàm sẽ được
hiển thị khi không có hàm nào khác được cung cấp - ví dụ: khi http://localhost/ci/index.php/helloworld/ được
duyệt Ví dụ: nếu chúng ta đã tạo một hàm gọi là foo, chúng ta có thể tìm thấy hàm này ở http://localhost/ci/index.php/helloworld/foo/.
Điều quan trọng cần nhớ là CI cấu trúc các URL của nó ra sao; ví dụ: http://host/codeignitordirectory/index.php/ class/function.
Trong hàm index của controller, chúng ta cần tải model, truy vấn database và truyền dữ liệu
đã truy vấn này đến view. Để tải bất kỳ tài nguyên nào vào CI, ví dụ: libraries,
helpers, views hoặc models, chúng tôi sử dụng class load. Sau khi chúng tôi đã tải model, chúng tôi có thể truy xuất nó thông qua
tên model của nó và một hàm cụ thể. Để truyền data cho một view, chúng ta cần gán nó vào một mảng
mục và truyền vào array - nó sẽ tái tạo các thành phần của array thành một biến trong file view.
1 |
<?php
|
2 |
class Helloworld extends Controller{ |
3 |
function index() |
4 |
{
|
5 |
$this->load->model('helloworld_model'); |
6 |
|
7 |
$data['result'] = $this->helloworld_model-><span class="sql">getData</span>(); |
8 |
$data['page_title'] = "CI Hello World App!"; |
9 |
|
10 |
$this->load->view('helloworld_view',$data); |
11 |
}
|
12 |
}
|
13 |
?>
|
Nếu chúng tôi đã truy xuất http://localhost/ci/index.php/helloworld/ ngay bây giờ, nó sẽ không hoạt động; Điều này là do file view không tồn tại.



Bước 9: Tạo view cho Hellowworld
File view là điều mà người dùng nhìn thấy và tương tác, nó có thể là một phân đoạn của một trang hoặc là toàn bộ trang. Bạn có thể chuyển array của các biến cho view thông qua đối số thứ hai
của hàm load của model. Để tạo view cho bài hướng dẫn của chúng tôi, hãy tạo một file mới có tên helloworld_view.php trong thư mục system/application/view. Tiếp theo, chúng ta chỉ cần tạo html thông thường của chúng tôi
và các phần tử của body, và sau đó là header và paragraph thông tin từ database. Để hiển thị tất cả
các bản ghi nhận được từ database, chúng tôi đưa nó vào trong vòng lặp "foreach"
mà vòng lặp thông qua tất cả các thành phần.
1 |
<html>
|
2 |
<head>
|
3 |
<title><?=$page_title?></title> |
4 |
</head>
|
5 |
<body>
|
6 |
<?php foreach($result as $row):?>
|
7 |
<h3><?=$row->title?></h3> |
8 |
<p><?=$row->text?></p> |
9 |
<br /> |
10 |
<?php endforeach;?>
|
11 |
</body>
|
12 |
</html>
|
Bạn có thể nhận thấy rằng chúng tôi đang sử dụng cú pháp php thay thế , điều này mang lại sự thuận tiện và tiết kiệm thời gian
để viết các biểu thức echo.
Bước 10: một số Extras
Khi bạn truy xuất "http://localhost/ci/index.php/helloworld/", bạn
sẽ thấy một điều tương tự như thế này



Nhưng chúng tôi vẫn chưa hoàn thành. Có một vài điều bạn có thể làm để cải thiện trải nghiệm CodeIgniter của mình -
như loại bỏ index.php phiền toái khỏi URL. Bạn có thể hoàn thành tác vụ này bằng cách tạo file .htaccess trong thư mục root và bổ sung code sau đây:
1 |
RewriteEngine on |
2 |
RewriteCond $1 !^(index\.php|images|robots\.txt) |
3 |
RewriteRule ^(.*)$ ci/index.php/$1 [L] |
4 |
Bạn cũng cần mở file config.php trong system/application/config/ và chỉnh sửa aray index_page thành một string trống.
1 |
$config['index_page'] = ""; |
Một lời khuyên tiện lợi khác là bật khả năng phân tích cú pháp thay thế PHP của CI nếu
máy chủ kích hoạt. Để thực hiện việc này, hãy mở file như trước đó, system/application/config/config.php và đặt mục mảng rewrite_short_tags thành TRUE.
1 |
$config['rewrite_short_tags'] = TRUE; |
Tôi hy vọng mọi việc suôn sẻ! Hãy hy vọng được xem nhiều hướng dẫn về CodeIgniter của tôi sắp tới.
- Hãy đăng ký NETTUTS RSS Feed để nhận các bài viết và hướng dẫn về web mỗi ngày.