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:
Code:
myproject
  app
  cake
  docs
  vendors
  .htaccess
  index.php
2. Cấu hình:
Đổ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' => ',
	);
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.

Code:
Cake is able to connect to the database.
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:

Code:
CREATE TABLE `articles` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 255 ) NOT NULL ,
`content` TEXT NOT NULL
) ENGINE = MYISAM ;
b. Viết model:
Tạo file article.php trong app/models với nội dung sau:

PHP Code:
<?php
class Article extends AppModel 
{
  var 
$name 'Article';
}
?>
b. Viết controller:
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');            
    }
}
?>
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
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>
edit.ctp: Thêm/sửa bài viết
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'); ?>
view.ctp: Xem bài viết
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;; ?>
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
andreconghau viết 12:51 ngày 10/10/2018
cam on pac nhiều lắm. Hy vong pac chia se them kinh nghiệm để chúng em học tập. ^^
umakemewanna216 viết 12:51 ngày 10/10/2018
cai packge cua ban gui bi loi roi
alumi viết 12:58 ngày 10/10/2018
Bài viết rất hữu ích. Xin cảm ơn bạn.

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.
nht2010 viết 12:51 ngày 10/10/2018
Em dùng wamp mà sao không cài được cakephp vậy .
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 .
rootkit viết 13:05 ngày 10/10/2018
mình chưa sài cakephp bao giờ ,cũng dự định chọn một cái framework nào đó để dùng ,qua đây mình muốn mở rộng cái topic này để cùng nhau học CakePhp ,mình có vài thắc mắc rất mong chủ topic giải đáp giúp :

- 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 ?
geany viết 13:06 ngày 10/10/2018
Được gửi bởi rootkit
mình chưa sài cakephp bao giờ ,cũng dự định chọn một cái framework nào đó để dùng ,qua đây mình muốn mở rộng cái topic này để cùng nhau học CakePhp ,mình có vài thắc mắc rất mong chủ topic giải đáp giúp :

- 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 ?
Tớ cũng chỉ mới tìm hiểu Cake, sai gì các bác sửa nhá

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.
taminhbao viết 12:57 ngày 10/10/2018
Sao mình làm như ậy mà nó không được bạn.Bạn có thể giải thích giúp mình với.

[=========> 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.
snowsnowly viết 13:01 ngày 10/10/2018
Mình đang học cakephp, đây là lần đầu nên không biết chi hết. Đọc bài này mình không hiểu:"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". vậy "www" là ở đâu zậy. Có thể giải thích rõ hơn cho mình với!
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!!
tndv viết 12:56 ngày 10/10/2018
thư mục www là thư mục gốc chứa các web project trên máy chủ. Ví dụ nếu bạn cài bộ AppSvr thì trong thư mục AppSvr có chứa mục www để bạn chứa mã nguồn của web bạn muốn chạy.
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.
Bài liên quan
0