Hướng dẫn học CakePHP: Một số qui ước CakePHP cần chú ý

Hướng dẫn học CakePHP: Một số qui ước CakePHP cần chú ý

Nội dung :

  • - Cách đặt tên file
  • - Tên lớp
  • - Các qui ước khi dùng Model, View , Controllers .

1. Cách đặt tên file, tên lớp

  • - Tên file sử dụng chữ thường, dùng dấu “_” để phân cách các từ
  • - Tên lớp dùng CamelCased (viết hoa chữ cái đầu tiên của từ)

Ví dụ : ta có tên lớp là MyClass -> file class tương ứng : my_class.php
Dưới đây là các ví dụ về cách đặt tên file cho mỗi dạng lớp khác nhau mà bạn thường sử dụng trong ứng dụng CakePHP :

2. Các qui ước về Model và CSDL

- Tên các lớp model được đặt ở dạng số ít và việc viết hoa thường tuân theo CamelCased
Ví dụ: Person, BigPerson và ReallyBigPerson.
- CakePHP không hỗ trợ khóa chính gồm nhiều cột. Nếu bạn muốn thao tác trực tiếp kết nối (join) các bảng, hãy truy vấn trực tiếp hoặc thêm một khóa chính thay cho khóa nhiều cột.
Ví dụ:

CREATE TABLE posts_tags (
id INT(10) NOT NULL AUTO_INCREMENT,
post_id INT(10) NOT NULL,
tag_id INT(10) NOT NULL,
PRIMARY KEY(id));

- Lẽ ra trong table post_tags, bình thường thì 2 cột post_id và tag_id ta có thể cho nó làm khóa chính nhưng CakePHP không chấp nhận điều này.
- Tên bảng tương ứng với các model của CakePHP ở dạng số nhiều và sử dụng gạch dưới (_) tên bảng tương ứng với các model ở trên là people, big_people, và really_big_people.
- Tuy nhiên, bạn vẫn có thể đặt tên bảng khác đi và cho CakePHP biết điều này thông qua biến $useTable trong model (các bài viết tiếp theo sẽ có ví dụ)
- Bạn có thể dùng thư viện Inflector có sẵn trong CakePHP để kiểm tra dạng số ít/số nhiều của các từ.
- Các khóa ngoại trong các quan hệ hasMany, belongsTo, hasOne có tên mặc định là số ít của tên bảng kèm theo _id ở cuối cùng.
Ví dụ với quan hệ NewsCategory có nhiều News, bảng news sẽ có khóa ngoại đến bảng news_categories là news_category_id.
- Các bảng liên kết được sử dụng trong quan hệ hasAnhBelongsToMany (viết tắt là HABTM – quan hệ nhiều nhiều) được đặt tên bằng cách kết nối các tên model theo thứ tự abc, vì vậy tên đúng sẽ là apples_zebras chứ không phải là zebras_apples.
- Do đó, ta phải thêm một khóa khác có tên là id
- Khóa chính mặc định trong CakePHP là cột id, kiểu int, tự tăng. Tuy nhiên, bạn cũng có thể định nghĩa lại khóa chính cho bảng thông qua biến $primaryKey trong model
- Thay cho việc sử dụng kiểu int, auto-increment làm khóa chính, bạn có thể sự dụng char(36) hoặc binary(36), khi đó CakePHP sẽ tự động tạo ra UUIDs để làm khóa khi ta thêm mới một record. UUID là một chuỗi gồm 32 byte, tương ứng với 36 ký tự.
Ví dụ : 550e8400-e29b-41d4-a716-446655440000

3. Qui ước về Controller :

- Tên lớp của controller đặt theo dạng số nhiều,
- Tuân theo CamelCased và cuối tên phải có chữ “Controller”.

Ví dụ: ta có Controller tên Products thì có class Controller như sau :

PHP Code:

<?php
            
Class ProductsController extends AppController{
            
……
        
}
?>

- Khi một phương thức trong Controller được đặt tên bắt đầu với với dấu “_” ở phía trước, bạn sẽ không thể truy xuất nó từ bên ngoài mà chỉ có thể truy xuất trong controller đó (cái này gọi là private).
Ví dụ:
 

PHP Code:

<?php
        
Class ProductsControllers extends AppController{
            function 
index(){
                
..
            }

            function 
_get_product(){
                
..
            }
                               function 
viewProduct(){
                                      
$this->_get_product();
                               } 
        }
    
?>

index() : public function
_get_product() : private function

Mô tả hoạt động :
- http://localhost/products : function index() : run
- http://localhost/products/_get_product : function _get_product() : not run
- http://localhost/products/viewProduct : function _get_product() : run

4. Qui ước về View

- Tên file của View được đặt tương ứng với phương thức trong Controller và để trong thư mục theo tên file controller (không kèm theo chữ “controller”).
- Đuôi file dạng *.ctp

Ví dụ :

Ta có controller NewsController với 2 function:
- View_all()
- View_detail()
Thì ta phải có 2 file tương ứng :
- View_all.ctp
- View_detail.ctp
Đặt trong thư mục app/view/news

- Mặc định, nếu trong controller NewsController có method view(), khi gọi action view trên trình duyệt (http://localhost/news/view) thì Controller sẽ tìm file view.ctp trong app/views/news/view.ctp
- Tuy nhiên, bạn có thể gọi một file view khác không phải là view.ctp bằng lệnh

PHP Code:

$this->render(‘ten_view’); 



Ví dụ về mặc định :

PHP Code:

<?php 
Class NewsController extends AppController{

   function 
view(){
    

   
}
}
?>

-Truy cập : http://localhost/news/view ->load file : view.ctp trong thư mục app/views/news/

Ví dụ về load 1 file view khác :

PHP Code:

<?php 
Class NewsController extends AppController{

    function 
view(){
        
.
      
$this->render(“view_demo”);
    }
}
?>

- Truy cập : http://localhost/news/view -> load file : view_demo.ctp trong thư mục app/views/news/

5.Tổng kết : viết demo đơn giản với CakePHP

- Viết dứng dụng đơn giản với đường link : http://localhost/cakephp/relax/playgame/10
- Từ link trên, ta cần có :
- Model : trong ví dụ này không xử lý dữ liệu nên không cần viết
- View : file view.ctp để hiển thị kết quả : Ban dang chon tro choi thu 12
- Controller : Relax với action Playgame nhận tham số 12
Cách thực hiện :
- Vào thư mục app/controllers/ tạo relaxs_controller.php với nội dung :

PHP Code:


<?php
class RelaxsController extends AppController {
    
    function  
index(){
    }
    
    function 
playgame($id=null){
        
$info = array(
                        
#DD0000">"title_page" => #DD0000">"CakePHP demo by qhonline.info",
                        
#DD0000">"id" => $id,
                    );
        
$this->set(#DD0000">"data",$info);
    }
}


Ghi chú : Hàm
PHP Code:

$this->set(“data”,$info



: gán mảng giá trị $info vào biến $data để hiển thị bên View tương ứng

- Vào thư mục app/views/ tạo thư mục relaxs ứng với Controllers relaxs trên
- Trong thư mục relaxs mới tạo , ta tạo file playgame.ctp với nội dung :

PHP Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
    <head>
        <title>
            <?php
            
echo $this->Html->charset();
            echo 
$data[#DD0000">'title_page']; #FF8000">/* Tiêu đề của trang web */
            
?>
        </title>
    </head>
    <body>
    <?php
        
echo #DD0000">"Ban dang choi tro choi thu ".$data[#DD0000">'id'];
    
?>
    </body>
</html>

-Kiểm tra kết quả : http://localhost/relaxs/playgame/12

Hướng dẫn học CakePHP: Một số qui ước CakePHP cần chú ý

Title không hiển thị kết quả như mong muốn do CakePHP có 2 chế độ :
- Dùng template có sẳn của nó
- Template của mình
Trong ví dụ này , mình dùng template mặc định nên phần title là do CakePHP quyết định

Tags: 
Bạn thấy bài viết này như thế nào?: 
Average: 10 (2 votes)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
SEO

Những yếu tố xếp hạng sẽ giảm ‘trọng lượng’ trong năm 2012

Có lẽ năm vừa qua SEO đã có 1 chuyển biến khá lớn khi bắt đầu chiến dịch Panda và các mirror mở rộng tầm ảnh hưởng. Trong đó các yếu tố SEO có những thay đổi và Google dần trở nên thông minh hơn khi thay đổi độ mạnh và yếu của các yếu tố này. Đặc biệt những yếu tố sau đây nó đã dần mất ưu thế và tất nhiên bạn cũng nên xem lại những yếu tố này để không phải quá chú trọng vào nó:

Microsoft quyết định đổi tên Metro thành Windows 8

Microsoft quyết định đổi tên Metro thành Windows 8

Do xung đột với bản quyền tên gọi, Microsoft buộc phải từ bỏ tên gọi Metro cho giao diện người dùng mới để thay bằng Windows 8, một tên gọi

Cách xem video bằng Quick Look trong Lion

Cách xem video bằng Quick Look trong Lion

Trong Snow Leopard, mỗi lần nhấn phím Space khi chọn một video, chức năng Quick Look sẽ chạy file đó trong Finder.

Công ty diệt chuột T&C

 

Diet con trung