Bạn đang xem danh sách các bài viết được gửi vào March, 2008
Làm back end trong CakePHP
Một trong những phần việc tớ luôn phải làm mỗi khi thực hiện một mini project bằng CakePHP là tạo khu vực back end để quản lý dữ liệu trong database. Trong bài viết này tớ muốn chia sẻ một chút kinh nghiệm liên quan, để giúp bạn phần nào giảm bớt được thời gian tìm kiếm thông tin nếu mới bắt đầu làm quen với Cake.
Tớ giả định bạn sử dụng Cake phiên bản 1.2 beta. Phiên bản 1.1 tớ không còn dùng nên không rõ những điều tớ viết có áp dụng với nó hay không.
1. Tách biệt front end và back end
a. Admin routing
Việc đầu tiên là tách biệt front end và back end thông qua admin routing. Chỉ việc uncomment dòng code Configure::write(’Routing.admin’, ‘admin’); trong file config/core.php là bạn đã có thể sử dụng tính năng này.
Với giá trị Routing.admin là ‘admin’, các action mang tiền tố ‘admin_’ trong các controller của bạn sẽ được coi là thuộc back end. Nghĩa là thay vì truy cập action đó bằng URL /controller/action, bạn sẽ sử dụng URL /admin/controller/action. Tương tự, nếu Routing.admin mang giá trị ‘acp’, các action của bạn sẽ cần có dạng acp_add, acp_edit, acp_delete…
b. Layout
Thường thì khu vực front end và back end sẽ mang layout khác nhau. Để thay đổi layout, tớ đặt điều kiện kiểm tra vào function beforeFilter() trong file app_controller.php:
function beforeFilter() {
if (strpos($this->action, 'admin_') !== false) {
$this->layout = 'admin';
}
}
Không thuộc back end đồng nghĩa với action sẽ mang layout ‘default’.
Và nếu tớ không nhầm thì ngoài cách kiểm tra tiền tố, bạn còn có thể kiểm tra xem $this->params['admin'] có tồn tại hay không để xác định phạm vi action hiện tại.
c. Dashboard
Không biết bạn thế nào, chứ tớ hay làm thêm một controller mang tên dashboard, coi đó là điểm đến ngay khi người dùng phía back end login. Controller này không gắn với table nào trong database, tuy nhiên có thể sử dụng dữ liệu của các table khác (để hiển thị thông số thống kê chẳng hạn). Tớ khai báo biến $uses trong file dashboard_controller.php như thế này:
class DashboardController extends AppController {
var $name = 'Dashboard';
var $uses = array('User', 'Group');
}
Sau đó, tớ thêm một dòng vào file config/routes.php để gắn URL /admin với trang dashboard:
Router::connect('/admin', array('controller' => 'dashboard', 'action' => 'index', 'admin' => 1));
d. URL
Ở View, khi bạn đặt liên kết tới action nào, thường có thể sử dụng HTML helper:
echo $html->link('View this post', array('controller' => 'posts', 'action' => 'view', $post['Post']['id']))
Nếu đó là action phía back end, bạn cần sửa sang lại một chút:
echo $html->link('Edit this post', array('controller' => 'posts', 'action' => 'edit', $post['Post']['id'], 'admin' => 1))
Nhớ thay ‘admin’ bằng giá trị Routing.admin mà bạn đặt từ trước.
(Còn tiếp)
Bài viết được gửi hôm 03.03.08 · Mang các từ khóa cakephp, code · Phản hồi [4]
Blog và những thứ thừa thãi
Một trong những thói quen mỗi ngày mà tớ không thể bỏ là đọc tin RSS. Tớ subscribe tất cả 84 feed, trong đó không dưới 10 feed cập nhật nhiều lần trong ngày, đồng nghĩa với việc hôm nào cũng bị khủng hoảng thông tin. Chính vì thế nên tớ rất lười phải rời bỏ Google Reader mà mò tới tận blog để đọc các bài viết. Thử tưởng tưởng mỗi tin chiếm một tab trong Firefox của tớ - RAM không biết bao nhiêu là đủ đây?
Mà đến tận blog gốc không phải đã xong ngay, tớ còn phải đợi load hết trang mới có thể đọc. Tớ ở ký túc, mạng wireless lởm (cái này ai chat với tớ đều biết - 5 phút out 6 lần có lẻ) nên nhiều khi chờ dài cổ mới đọc được hết một bài - mất hết cả hứng.
Nói dông dài như thế để thấy là, tớ rất rất dị ứng với những blog load chậm. Thà chậm bởi bài viết dài thì không nói, đằng này nhiều cái trở nên chậm vì quá nhiều những thứ thừa thãi - thật không thể hiểu nổi tại sao chủ nhân blog lại đưa vào?
Bài viết được gửi hôm 03.03.08 · Mang các từ khóa blogging · Phản hồi [12]
4 tháng {one true brace
Hôm nay là blog tớ tròn 4 tháng tuổi. Nghĩa là mới 1/3 của một năm, một thời gian không dài theo thời gian thực, nhưng không đến nỗi quá ngắn theo thời gian internet, và đáng để nhìn lại một chút.
1. Về domain. Về host. Về quảng cáo.
Ban đầu khi chọn domain tớ có 4 “ứng cử viên sáng giá”: uncategorizable.com, decryptable.com, introvertr.com và onetruebrace.com. Cuối cùng tớ chọn cái cuối. Lý do đơn giản là tớ thích nó hơn 3 domain kia.
Về host cũng không cần nhắc đến nhiều, vì thực tế tớ đã có 2 bài viết về vấn đề này rồi: Servage - Review sau một ngày sử dụng và 17 tiếng downtime. Đến giờ tớ vẫn sử dụng A Small Orange và rất hài lòng với nó.
Đặt quảng cáo trên trang web - đấy là thứ tớ rất ghét. Cứ “suy bụng ta ra bụng người” thôi, mình ghét quảng cáo như thế nào thì chắc chắn không ít người cũng như vậy. Cách đây 4 năm, khi tớ làm blog đầu tiên của mình, tớ duy trì nguyên tắc “không quảng cáo” trong suốt thời gian tồn tại của blog đó - 10 tháng. Giờ thì quan điểm của tớ khác hơn một chút - “không phải quảng cáo nào cũng gây mất cảm tình như nhau”, nên tớ chấp nhận để text link trên sidebar của blog này. Thu nhập đủ để chi trả cho tiền host. Và cái chính là không làm người đọc (cũng như tớ) thấy khó chịu. Text link hơn hẳn banner hay animated GIF ở khoản đó.
Bài viết được gửi hôm 01.03.08 · Mang các từ khóa linh tinh · Phản hồi [9]
Những hình thức bảo vệ nội dung lố bịch
Nhân đọc bài viết How not to secure your website trên reddit, và sau đó là Digg.
1. Bài viết So you hacked our site!? đăng trên The Daily WTF kể về trang web của một công ty sử dụng Javascript để bảo vệ khu vực “for Officers only”. Một hình thức bảo vệ lố bịch chưa từng thấy…
Chỉ view source thôi cũng đủ bò lăn ra cười:
<script language="javascript">
<!--//
/*This Script allows people to enter by using a form that asks for a
UserID and Password*/
function pasuser(form) {
if (form.id.value=="buyers") {
if (form.pass.value=="gov1996") {
location="<a href="http://officers.federalsuppliers.com/agents.html">http://officers.federalsuppliers.com/agents.html</a>"
} else {
alert("Invalid Password")
}
} else { alert("Invalid UserID")
}
}
//-->
</script>
Chủ trang web làm gì khi câu chuyện này được đăng lên reddit và Digg? Đơn giản thôi, đổi username và password! Trong source code viết bằng Javascript! Tại thời điểm tớ viết bài này, username đã được đổi thành zzzzzz và password thành cái gì đó tương tự…
Google với từ khóa <script language=”javascript”> <!–// /*This Script allows people to enter by using a form that asks for a UserID and Password*/ function pasuser(form) { cho ra không dưới 200 kết quả…
Miễn bình luận.
Bài viết được gửi hôm 01.03.08 · Mang các từ khóa linh tinh, wtf · Phản hồi [5]