10/10/2018, 10:50
Hướng dẫn viết ứng dụng bằng CakePHP
Mình có làm việc với CakePHP một thời gian, cũng có một số kinh nghiệm muốn chia sẻ với các bạn(chỉ dành cho newbie thôi nhé, webserver dùng wamp).
1. Cài đặt:
Tải CakePHP tại http://cakeforge.org/frs/download.ph...ke_1.3-dev.zip
Sau khi tải về, các bạn giải nén vào một thư mục nào đó trong www, chẳng hạn myproject
Cấu trúc thư mục sau khi đã giải nén như sau:
2. Cấu hình:
Đổi tên file trong app/config/database.php.default thành database.php
Chỉnh sửa các thông số: login, password và database cho phù hợp. Thông thường nếu bạn cài wamp thì login là root và password là rỗng.
3. Chạy thử:
Nhập địa chỉ http://localhost/myproject, nếu bạn thấy thông báo như sau thì mọi việc OK.
4. Các khái niệm cơ bản:
CakePHP là một framework được viết dựa trên mô hình MVC(Model - View - Controller), ý nghĩa của của 3 thằng này như sau:
a. Model: giao tiếp với CSDL, các model được đặt trong thư mục app/models. Tên của model là một danh từ số ít, thường nên đặt tên là danh từ số ít của tên bảng dữ liệu, ví dụ bạn có bảng dữ liệu categories thì tên model là Category và tên file là category.php.
b. Controller: xử lý các yêu cầu, trao đổi với Model để lấy dữ liệu và truyền cho View. Controller được đặt trong thư mục app/controllers. Tên của controller là một danh từ số nhiều, ví dụ: CategoriesController, tên file sẽ là categories_controller.php.
c. View: hiển thị dữ liệu, nhập dữ liệu đầu vào, nó tóm lại là giao diện giao tiếp với người dùng, cái mà người dùng nhìn thấy trên trang web. View được đặt trong thư mục app/views, mỗi view sẽ là một folder. Tên thư mục view là một danh từ số nhiều, ví dụ: categories, trong thư mục này sẽ chứa các file có phần mở rộng là .ctp(với Cake 1.2) hoặc .thtml(với Cake 1.1) tưong ứng với từng action trong Controller.
5. Viết thử một ứng dụng:
Sau khi đã nắm một số khái niệm cơ bản, chúng ta bắt tay vào viết một ứng dụng đơn giản: nhập một bài viết bao gồm: tiêu đề, nội dung và hiển thị bài viết này. Các bước thực hiện như sau:
a. Tạo bảng dữ liệu:
Tạo bảng articles gồm các fields như sau:
b. Viết model:
Tạo file article.php trong app/models với nội dung sau:
b. Viết controller:
Tạo file articles_controller.php trong app/controllers với nội dung sau:
c. Viết view:
Trước khi viết view các bạn cần tìm hiểu một chút về layout trong CakePHP, các file layout nằm ở app/views/layouts, phần mở rộng cũng giống các file view là .ctp, trong một ứng dụng bạn có thể dùng nhiều layout, CakePHP dùng layout mặc định là default.ctp
Một file layout đơn giản như sau:
default.ctp
Tạo folder articles trong app/views
index.ctp: Hiển thị các bài viết
edit.ctp: Thêm/sửa bài viết
view.ctp: Xem bài viết
Bây giờ các bạn nhập url: http://localhost/myproject/articles để xem kết quả nhé.
Trên đây là những bước đơn giản nhất để viết một ứng dụng web bằng CakePHP, framework này còn một số khái niệm nữa như: Component, Helper,.. mình sẽ tiếp tục trình bày trong bài sau. Chúc các bạn nướng bánh thành công với CakePHP
1. Cài đặt:
Tải CakePHP tại http://cakeforge.org/frs/download.ph...ke_1.3-dev.zip
Sau khi tải về, các bạn giải nén vào một thư mục nào đó trong www, chẳng hạn myproject
Cấu trúc thư mục sau khi đã giải nén như sau:
Code:
myproject app cake docs vendors .htaccess index.php
Đổi tên file trong app/config/database.php.default thành database.php
Code:
var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'database_name', 'prefix' => ', );
3. Chạy thử:
Nhập địa chỉ http://localhost/myproject, nếu bạn thấy thông báo như sau thì mọi việc OK.
Code:
Cake is able to connect to the database.
CakePHP là một framework được viết dựa trên mô hình MVC(Model - View - Controller), ý nghĩa của của 3 thằng này như sau:
a. Model: giao tiếp với CSDL, các model được đặt trong thư mục app/models. Tên của model là một danh từ số ít, thường nên đặt tên là danh từ số ít của tên bảng dữ liệu, ví dụ bạn có bảng dữ liệu categories thì tên model là Category và tên file là category.php.
b. Controller: xử lý các yêu cầu, trao đổi với Model để lấy dữ liệu và truyền cho View. Controller được đặt trong thư mục app/controllers. Tên của controller là một danh từ số nhiều, ví dụ: CategoriesController, tên file sẽ là categories_controller.php.
c. View: hiển thị dữ liệu, nhập dữ liệu đầu vào, nó tóm lại là giao diện giao tiếp với người dùng, cái mà người dùng nhìn thấy trên trang web. View được đặt trong thư mục app/views, mỗi view sẽ là một folder. Tên thư mục view là một danh từ số nhiều, ví dụ: categories, trong thư mục này sẽ chứa các file có phần mở rộng là .ctp(với Cake 1.2) hoặc .thtml(với Cake 1.1) tưong ứng với từng action trong Controller.
5. Viết thử một ứng dụng:
Sau khi đã nắm một số khái niệm cơ bản, chúng ta bắt tay vào viết một ứng dụng đơn giản: nhập một bài viết bao gồm: tiêu đề, nội dung và hiển thị bài viết này. Các bước thực hiện như sau:
a. Tạo bảng dữ liệu:
Tạo bảng articles gồm các fields như sau:
Code:
CREATE TABLE `articles` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `title` VARCHAR( 255 ) NOT NULL , `content` TEXT NOT NULL ) ENGINE = MYISAM ;
Tạo file article.php trong app/models với nội dung sau:
PHP Code:
<?php
class Article extends AppModel
{
var $name = 'Article';
}
?>
Tạo file articles_controller.php trong app/controllers với nội dung sau:
PHP Code:
<?php
class ArticlesController extends AppController
{
var $uses = array('Article');
function index()
{
$articles = $this->Article->find('all');
$this->set('articles', $articles);
}
function view($id)
{
$article = $this->Article->read(null, $id);
$this->set('article', $article);
}
function edit($id = null)
{
if(empty($this->data))
{
if($id)
{
$article = $this->Article->read(null, $id);
$this->data = $article;
}
}
else
{
if($this->Article->save($this->data))
{
$this->redirect('index');
}
}
}
function delete($id)
{
$this->Article->del($id);
$this->redirect('index');
}
}
?>
Trước khi viết view các bạn cần tìm hiểu một chút về layout trong CakePHP, các file layout nằm ở app/views/layouts, phần mở rộng cũng giống các file view là .ctp, trong một ứng dụng bạn có thể dùng nhiều layout, CakePHP dùng layout mặc định là default.ctp
Một file layout đơn giản như sau:
default.ctp
PHP Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $title_for_layout; ?></title>
</head>
<body>
<?php echo $content_for_layout; ?>
</body>
</html>
Tạo folder articles trong app/views
index.ctp: Hiển thị các bài viết
PHP Code:
<table border="0" cellpadding="2" cellspacing="2" width="100%">
<tr>
<td>Id</td>
<td>Title</td>
<td></td>
</tr>
<?php foreach ($articles as $article) { ?>
<tr>
<td><?php echo $article***91;'Article'***93;***91;'id'***93;; ?></td>
<td><?php echo $article***91;'Article'***93;***91;'title'***93;; ?></td>
<td>
<a href="<?php echo $html->url('/articles/edit/' . $article***91;'Article'***93;***91;'id'***93;);?>">***91;Edit***93;</a>
<a href="<?php echo $html->url('/articles/delete/' . $article***91;'Article'***93;***91;'id'***93;);?>">***91;Delete***93;</a>
</td>
</tr>
<?php } ?>
<tr>
<td><a href="<?php echo $html->url('/articles/edit');?>">***91;Add new article***93;</a></td>
</tr>
</table>
PHP Code:
<?php echo $form->create('Article', array('action'=>'edit')); ?>
<?php echo $form->input('Article.title', array('type'=>'text')); ?>
<?php echo $form->input('Article.content', array('type'=>'textarea')); ?>
<?php echo $form->hidden('Article.id'); ?>
<?php echo $form->end('Submit'); ?>
PHP Code:
<?php echo 'Id: '. $article***91;'Article'***93;***91;'id'***93;; ?>
<br />
<?php echo 'Title: '. $article***91;'Article'***93;***91;'title'***93;; ?>
<br />
<?php echo 'Content: '. $article***91;'Article'***93;***91;'content'***93;; ?>
Trên đây là những bước đơn giản nhất để viết một ứng dụng web bằng CakePHP, framework này còn một số khái niệm nữa như: Component, Helper,.. mình sẽ tiếp tục trình bày trong bài sau. Chúc các bạn nướng bánh thành công với CakePHP
Bài liên quan
Các bạn có thắc mắc về CakePHP có thể ghé thăm trang web http://vietcake.myplus.org để gửi câu hỏi và trao đổi. Admin sẽ trả lời tất cả các vấn đề của các bạn.
Nó hiện lên trang cakephp trong localhost mà không có css gì hết .
Không biết lỗi gì đây , bác nào chỉ em với . Làm theo bác cũng bị notfound luôn .
- Theo như cai mô hình MVC của CakePhp thì việc đặt tên cho file Model ,Controler ,View và table theo một quy tắc nhất định để cho cake biết đường autoload và móc cái table , giả sử ta có 2 table và 2 table có ràn buộc với nhau thì không rõ các tên file như thế nào ?
- Trong phần view bạn viết có các biến $html ,$form ,không rõ các biến này lấy đâu ra ,hay là cakephp có sẵn ?
- Trong bài viết không hề nhắc đến code SQL để select ,insert ,update dữ liệu ,chẳng lẽ cakephp nó sản sinh code sql tự động sau khi khai báo MVC và table ? muốn show code sql ra không biết làm như thế nào ?
- Khi chạy http://localhost/myproject/articles theo mình hiểu thì nó móc vào thư mục articles trong view ,vậy nếu như có một thư mục "myproject\articles" thì thằng cake này xử lý ra sao ?
1. Tất cả convention khi làm việc với Cake đều xoay quanh DB. Khi làm việc với DB mặc định là thông qua cơ chế ORM nên bác không cần viết bất kỳ câu truy vấn nào cả, chỉ việc sử dụng các propertites như $belongsTo, $hasOne, $hasAndBelongsTo ... và một số method cung cấp sẵn.
2. $html, $form là helper được cung cấp sẵn.
3. Cái vấn đề http://localhost/myproject/articles nó liên quan đến phần config router. URL thường có dạng Controller/Action/Params.
[=========> Bổ sung bài viết <=========]
Bạn itdacqn cho mình hỏi sao mình làm như bạn nhưng nó không được.
Thanks!!
[=========> Bổ sung bài viết <=========]
Và!! mình cũng không hiểu:
" Tạo bảng dữ liệu:
Tạo bảng articles gồm các fields như sau:
CREATE TABLE `articles` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 255 ) NOT NULL ,
`content` TEXT NOT NULL
) ENGINE = MYISAM ; "
Là đoạn code này nằm ở đâu zậy!!
Thanks!!
Nếu bạn sài linux thì mục www nằm ở /var/www và trong thư mục www thường chứa thư mục html hoặc htdocs mặc định chữa source web.