Đăng ký nhận RSS Feed

<?php echo 'Welcome to my blog!' ?>

one true brace

viết về những thứ tớ quan tâm, thế là đủ

Thủ thuật CakePHP, phần 1

Bài viết bạn sắp đọc thuộc loạt bài Thủ thuật CakePHP

  1. Thủ thuật CakePHP, phần 1

Trong loạt bài viết (không thường xuyên) này, tớ sẽ tổng hợp một vài thủ thuật nhỏ liên quan đến CakePHP. Trong đó, tớ mặc định bạn đang sử dụng Cake 1.2 - phiên bản mới nhất tại thời điểm này là 1.2.0.7296 RC2.

1. counterCache

Như bạn có thể thấy, khi code với CakePHP, nếu tuân theo các quy ước liên quan đến việc đặt tên table, column, class…, bạn sẽ đỡ cho mình được rất nhiều công việc, ví dụ như xử lý các giá trị created - thời điểm tạo record, modified - thời điểm cuối record được sửa.

Check out “CakePHP Conventions” for more information, but suffice it to say that naming our table ‘posts’ automatically hooks it to our Post model, and having fields called ‘modified’ and ‘created’ will be automagically managed by Cake.

- Example Applications :: Blog

“Automagic” của Cake không dừng lại ở đó - bên cạnh các field created, modified, *_id, bạn có thể sử dụng field có tên dạng *_count để lưu số lượng record liên quan.

Một ví dụ đơn giản: Mỗi record trong table Comment có field post_id trỏ tới record liên quan trong table Post. Để đếm số lượng comment của một post nhất định, thay vì dùng findCount(), nghĩa là mất thêm 1 query, bạn chỉ việc xem giá trị field comment_count được Cake xử lý tự động.

Việc khai báo trong 2 file model post.php, comment.php đơn giản là:

class Post extends AppModel {
	var $hasMany = array('Comment');
}

class Comment extends AppModel {
	var $belongsTo = array(
		'Post' => array('counterCache' => true)
	);
}

Ổn đấy chứ?

2. Debug or not debug?

Debug level của CakePHP, với 4 giá trị 0, 1, 2, 3 có thể nhận, được khai báo trong file config/core.php. Trong thời gian phát triển, thường thì bạn sẽ đặt giá trị này lớn hơn 0, tuy nhiên khi đó nếu 1 controller của bạn dùng layout ‘ajax’, bạn sẽ thấy Cake vẫn tự động chèn thêm các dữ liệu debug thừa vào cuối response. 

Bạn có thể xử lý trường hợp này bằng cách dùng component RequestHandler, với đoạn mã sau được thêm vào file app_controller.php:

class AppController extends Controller {
	var $components = array('RequestHandler');

	function beforeRender() {
		if ($this->RequestHandler->isAjax() || $this->layout == 'ajax') {
			Configure::write('debug', 0);
		} else {
			Configure::write('debug', 2);
		}
	}
}

Vấn đề đã được giải quyết.

Phần 1 thế đi đã. 

Bài viết được gửi hôm 20.07.08 · Mang các từ khóa ,

Bookmarklet E3
Nhật ký jtale &rarr

Bài viết liên quan:


6 phản hồi

  1. Mèo gửi hôm 23.07.08 lúc 4:07 pm #

    Chả hiểu gì :D

  2. pupi gửi hôm 24.07.08 lúc 1:42 pm #

    muốn học thêm php nên bắt đầu từ quyển nào nhỉ?

  3. johan tran gửi hôm 28.07.08 lúc 8:55 am #

    Ngoài đề: Cho tớ hỏi, cậu có dùng app, extension hay plugin nào đề update cho tumlbr không. Dùng cái nào tiện nhất thì bảo tớ. Tớ dùng add-on Dashblog snackfeed mạng ở nhà thỉnh thoảng không load được. Thank.

  4. QAD gửi hôm 04.08.08 lúc 1:56 pm #

    @johan tran: Update tumblr tớ dùng thẳng bookmarklet thôi, không chơi app/ext/plugin gì khác :D

  5. BinhPham gửi hôm 05.09.08 lúc 10:33 am #

    Cái code highlight của cậu nhìn dễ chịu nhỉ, cậu có biết cái theme nào cho e-texteditor giống vậy không nhỉ :D

  6. QAD gửi hôm 05.09.08 lúc 2:40 pm #

    @BinhPham: Tớ nhớ không nhầm thì e cũng có theme này, tên là Twilight.

Gửi phản hồi




Gõ tiếng Việt: Tự động TELEX VNI Off


Đăng ký nhận email dù không gửi phản hồi