CakePHP là một framework cho php, mục đích của nó là cung cấp một framework cho người sử dụng php phát triển những ứng dụng web nhanh, mạnh mà không mất tính linh hoạt của nó. Việc viết web trở nên đơn giản và nhanh hơn rất nhiều so với cách viết truyền thông bằng việc dựa trên các thư viện, lớp có sẵn thêm vào đó nó cũng hổ trợ Ajax, Javascript và CSS. Và điều quan trọng là CakePHP is free.Trang chủ cakephp: http://cakephp.org. Để sử dụng nó, yêu cầu người làm phải biết những kiến thức cơ bản về PHP và HTML, ... Có thể đọc nội dung chi tiết về nội dung cũng như ví dụ của nó tại http://manual.cakephp.org
Download cakephp framework
Click vao lien ket sau de download cakephp framework ve: http://cakeforge.org/frs/?group_id=23&release_id=343.
Cài đặt và cấu hình cakephp
Cài đặt
Để sử dụng nó, cần phải đáp ứng những yêu cầu sau:
- Một HTTP Server (vd như Apache, IIS)
- CakePHP chỉ support trong PHP ver 4 trở lên.
- Database: cake hổ trợ các hệ cơ sở dữ liệu sau: MySql, PostgreSQL.
- Apache Web Server Version 2.2.3
- PHP Script Language Version 5.1.6
- MySQL Database Version 5.0.24a
- phpMyAdmin Database Manager Version 2.9.0.2
/MyCake
/app
/cake
/vendors
.htaccess
index.php
Để cake có thể làm việc được với database, cần cấu hình lại trang database.php, mặc định trang này không có, để cấu hình ta làm như sau: Mở file database.php.default ở /app/config và Save As lại thành file database.php. Điều chỉnh lại các thông số:
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'project_name',
'prefix' => );
Quy ước về đặt tên bảng trong database
- Tên bảng trong cake nên ở dạng tiếng Anh số nhiều (vd: users, customers, students, ... )
- Bảng phải có primary key tên là 'id'
- Nếu có sử dụng quan hệ trong các bảng vd: user_id (user không có s và dấu _ cộng id)
Ví dụ dùng CakePHP để viết modul quản lý khách hàng
Tôi sẽ nói đến tính năng, cũng như mô hình hoạt động của CakePHP, cách viết một web application bằng cakephp tôisẽ nói dần với các bạn qua ví dụ: Sau khi cài đặt và cấu hình CakePHP, kiểm tra CakePHP đã setup chưa, bạn test thử bằng cách mở web browser lên go http://localhost/MyCake/ bạn sẽ thấy giao diện như sau
This image has been resized. Click this bar to view the full image. The original image is sized 903x679. |
Cần chú ý đến 2 dòng
- Your database configuration file is present.
- Cake is able to connect to the database.
Tạo bảng cơ sở dữ liệu
Ta tạo bảng customers với những field như sau:
- id: INT, AUTO_INCREMENT, PRIMARY KEY
- name: NVARCHAR
- age: INT
- address: NVARCHAR
Code của ứng dụng Customers Manager
Mở trình soạn thảo và tạo các file và nội dung như sau lưu theo đường dẫn chỉ định
File customer.php -> C:\AppServ\www\MyCake\app\models\
class Customer extends AppModel
{
var $name = 'Customer';
}
?>
class CustomersController extends AppController
{
var $name = 'Customers';
function index()
{
$this->set('customers', $this->Customer->findAll());
}
}
?>
Chú ý tạo thư mục customers trong /app/views
Customer Manager
Id Name Age Address
foreach ($customers as $cust): ?>
echo $cust['Customer']['id']; ?>
echo $html->link($cust['Customer']['name'], '/customers/view/'.$cust['Customer']['id']);?>
echo $html->link(
'Delete',
"/customers/delete/{$cust['Customer']['id']}",
null,
'Are you sure?'
)?>
echo $html->link('Edit', '/customers/edit/'.$cust['Customer']['id']);?>
echo $cust['Customer']['age']; ?>
echo $cust['Customer']['address']; ?>
endforeach; ?>
echo $html->link("Add Customer", "/customers/add"); ?>
This image has been resized. Click this bar to view the full image. The original image is sized 1086x421. |
Như vậy là bạn đã tạo được ứng dụng đơn giản đầu tiên về việc sử dụng cakephp để viết ứng dụng web. Tiếp theo tôi sẽ giải thích cho các bạn mô hình hoạt động của CakePHP, cách viết các trang,cũng như cách sử dụng biến, hàm ...
Kiến trúc hoạt động
Như tôi đã giới thiệu CakePHP là một framework, nó hoạt động theo kiến trúc MVC (Model, View, Control). Trong Cake Model được thể hiện là một bảng dữ liệu, lưu trữ dữ liệu theo như các quy tắc mà Cake định nghĩa theo mặc định hoặc theo developer tự định nghĩa (chúng ta sẽ nói tính hợp lệ của dữ liệu qua phần Validate dữ liệu). View thể hiện các file view với code có thể là html và php. Controller sẽ thực hiện các yêu cầu từ server( ví dụ như buộc người dùng nhập dữ liệu vào input text), và sử dụng các Model để đọc, viết, hoặc thay đổi dữ liệu trong database và gởi dữ liệu đã được xử lý đến View.
Model
Trong ví dụ trên các bạn thấy trong file customer.php với cách viết code như trên, được Cake hiểu là ta muốn tạo một model tên là Customer để sử dụng trong CustomersController của chúng ta. Biến $name được chỉ định để tránh trường hợp model của chúng ta trùng với tên của các hàm của php. - Và lớp Customer sẽ được kế thừa các thuộc tính và phương thức từ lớp AppModel. Để có thể hiểu chi tiết về model và cách sử dụng các thuộc tính và hàm của model bạn có thể tham khảo tại http://manual.cakephp.org/chapter/models
Controller
Controller được sử dụng để quản lý việc giao tiếp với cơ sở dữ liệu, thiết lập các yêu cầu theo ý muốn của chúng ta để thể hiện lên view vidu như các hàm xử lý thêm, xóa, sữa và hiển thị, ..., là nơi mà tất cả các hoạt động của model ta sẽ quản lý nó được. Trong ví dụ trên (customers_controller.php)đoạn code trên được Cake hiểu rằng ta sẽ tạo một CustomersController dùng để quản lý việc sử dụng, các hoạt động của CustomerModel. Tương tự lớp CustomersController sẽ kế thừa từ lớp AppController. - Hàm index() sẽ được xử lý khi ta gọi trang index.thtml. Trong đó có phương thức set() được sử dụng để gán giá trị là một mảng được trả về từ phương thức findAll() tại của model Customer. Trong ví dụ trên thì biến $customers sẽ mang giá trị là mảng các customer được lấy từ bảng customers từ database. Để xem chi tiết về controller các bạn có thể tham khảo tại: http://manual.cakephp.org/chapter/controllers
View
View là nơi thể hiện dữ liệu đã được xử lý của chúng ta. Một view được xem như một trang template. Chúng ta có thể lấy dữ liệu từ model tương ứng. Dữ liệu được truyền qua một mãng $data. Trong ví dụ trên thì index.thtml là một view. Phần tiếp theo tôi sẽ nói đến chi tiết view thông qua ví dụ trên. Tiếp theo ta tìm hiểu đến các thuộc tính và phương thức trong index.thtml
foreach ($customers as $cust): ?>
Hoàn chỉnh các chức năng của modul quản lý customer
Ta sẽ thêm các chức năng thêm, sữa, xóa, hiển thị trong view của chúng ta. Ta thêm các hàm trong customers_controller như sau:
class CustomersController extends AppController
{
var $name = 'Customers';
function index()
{
$this->set('customers', $this->Customer->findAll());
}
function view($id)
{
$this->Customer->id = $id;
$this->set('customers', $this->Customer->read());
}
function add()
{
if (!empty($this->data))
{
if ($this->Customer->save($this->data))
{
$this->flash('Your customer has been saved.','/customers');
}
}
}
function delete($id)
{
$this->Customer->del($id);
$this->flash('The customer with id: '.$id.' has been deleted.', '/customers');
}
function edit($id = null)
{
if (empty($this->data))
{
$this->Customer->id = $id;
$this->data = $this->Customer->read();
}
else
{
if ($this->Customer->save($this->data['Customer']))
{
$this->flash('Your customer has been updated.','/customers');
}
}
}
}
?>
Add Customer
echo $html->input('Customer/name', array('size' => '40'))?>
edit.thtml
Edit Your Customer
Your Customer
Name :echo $customers['Customer']['name']?>
Age :echo $customers['Customer']['age']?>
Address:echo $customers['Customer']['address']?>
Components
Trong những trường hợp vì một lý do nào đó ta không thể viết được các hàm trong controller, thì components sẽ chúng ta giải quyết được vấn để đó, và đó cũng chính là một đặc tính rất hữu ích cho các developer trong việc kế thừa các function từ các nguồn khác.
Các files component được lưu giữ ở thư mục app/controllers/components/. Ví dụ ta tạo một file component tên là cpn.php, nội dung trang components đó sẽ tương tự như sau:
class CpnComponent extends Object
{
var $comp = null;
var $controller = true;
function startup(&$controller)
{
// controller initialization here.
}
function doComp()
{
$this->comp = 'cpn';
}
}
Để sử dụng components đó các bạn phải khai báo biến $components trong controller và gán giá trị cho nó chính là tên components. Ví dụ trong ví dụ về quản lý Customer trên bạn muốn sử dụng components cpn.php trong CustomersComtroller thì đoạn code như sau
class CustomersController extends AppController{
var $name = 'Customers';
var $components = array('cpn');
...
}
?>