Thứ sáu, 23/08/2013 | 00:00 GMT+7

Cách tạo một ứng dụng web nhỏ với CakePHP trên VPS (Phần 1)


Giới thiệu về CakePHP

CakePHP là một khung công tác PHP mạnh mẽ và mạnh mẽ được xây dựng dựa trên mô hình lập trình Model-View-Controller (MVC). Ngoài cách linh hoạt mà bạn có thể sử dụng để xây dựng ứng dụng của bạn , nó còn cung cấp cấu trúc cơ bản để tổ chức các file và tên bảng database - giữ mọi thứ nhất quán và logic.

Trong hướng dẫn trước, ta đã thấy cách cài đặt CakePHP vào VPS của bạn và thực hiện một số cấu hình ban đầu. Ngoài ra, ta đã cài đặt một database sẽ phục vụ cho ứng dụng web nhỏ của ta , ta sẽ bắt đầu trong hướng dẫn này và kết thúc trong phần tiếp theo. Vì vậy, mục đích là chơi một chút với CakePHP để hiểu rõ hơn về cách bạn có thể sử dụng nó để xây dựng ứng dụng bạn muốn. Ta sẽ đi qua một số khái niệm chính (Bộ điều khiển, Mô hình, Chế độ xem, v.v.) và sử dụng các ví dụ để chứng minh chúng là gì. Ở phần cuối, ta sẽ có một ứng dụng nhỏ thực hiện các thao tác CRUD (tạo, đọc, cập nhật, xóa) trên bảng database của ta .

Hướng dẫn này giả định bạn đã làm theo tất cả các bước được đề cập trong phần cuối cùng. Điều này nghĩa là có quyền truy cập dòng lệnh vào VPS của bạn đang chạy LAMP và đã cài đặt và cấu hình CakePHP. Nói cách khác, nó sẽ tiếp tục từ nơi phần hướng dẫn trước đã kết thúc.

Nếu bạn còn nhớ, trạng thái của ứng dụng của ta là một cài đặt CakePHP đơn giản trong folder / var / www / project và một database có tên là cake chứa một bảng có tên là các bài đăng hiện có một hàng trong đó. Hãy vào dòng lệnh mysql của ta và thêm một hàng khác:

INSERT INTO posts (title,body,created)
    VALUES ('Another title', 'Another body text', NOW());

Bây giờ ta có 2 hàng, ta có thể tiếp tục và bắt đầu sử dụng CakePHP để tương tác với dữ liệu này. Nhưng trước đây, một vài từ về quy ước đặt tên.

Quy ước đặt tên

CakePHP cung cấp một số tính năng tuyệt vời nếu bạn tuân theo các quy ước đặt tên mà nó đề xuất. Điều này cũng phục vụ tốt cho việc giữ cho ứng dụng của bạn logic và nhất quán. Ví dụ: tên Controller phải là CamelCased, phải ở dạng số nhiều, kết thúc bằng từ Controller (ví dụ như PostsController ) và được lưu trữ trong các file có tên giống nhau ( PostsController.php ).

Mặt khác, tên lớp của mô hình là số ít và phản ánh mô hình dữ liệu riêng lẻ ( Post ). Hơn nữa, lớp Model - nếu được đặt tên theo quy ước - sẽ tự động suy ra rằng dữ liệu của nó nằm trong bảng database được gọi cùng tên ở số nhiều ( bài viết trong trường hợp này) và nó sẽ được Bộ điều khiển có cùng tên sử dụng trong số nhiều và có từ Controller ở cuối (trong trường hợp của ta là PostsController ).

Đây chỉ là một giới thiệu ngắn, để biết thêm thông tin về các quy ước trong CakePHP, bạn có thể truy cập trang này .

Ngươi mâu

Các lớp Mô hình là lớp nghiệp vụ của ứng dụng của bạn vì chúng được sử dụng để tương tác với dữ liệu . Trong CakePHP, Mô hình thường đại diện cho một bảng database , nhưng chúng cũng được dùng để truy cập các loại dữ liệu khác. Về mặt này, Mô hình là các mô hình dữ liệu (một bài đăng trên blog, một comment , một user là các mô hình dữ liệu chẳng hạn) và khai báo của chúng nằm trong các file nằm trong folder / app / Model .

Trong ứng dụng của ta , ta sẽ tuân theo các quy ước đặt tên vì vậy ta sẽ đặt tên lớp Model của ta là Post và đặt nó trong một file có tên Post.php nằm trong folder app / Model . Bằng cách này, nó sẽ tự động biết rằng nó nên sử dụng bảng posts trong database của ta và sẽ được sử dụng bởi PostsController .

Vì vậy, hãy tiếp tục và tạo file và đặt bên trong khai báo lớp sau mà ta mở rộng lớp Mô hình CakePHP mặc định để tạo một lớp cho các bài đăng trên blog của ta (hãy đảm bảo bạn thêm thẻ mở PHP ở đầu file ):

class Post extends AppModel {
}

Lưu file và thoát. Bằng cách mở rộng lớp Mô hình CakePHP mặc định và tuân theo các quy ước đặt tên, đây là tất cả những gì ta cần cho các hoạt động CRUD đơn giản trên bảng này vì CakePHP biết phải làm gì. Tuy nhiên, bạn nên biết tên phương thức mà nó sử dụng để truy vấn bảng để bạn có thể gọi chúng trong Bộ điều khiển của bạn . Ta sẽ xem xét một số tiếp theo.

Bộ điều khiển

Bộ điều khiển được sử dụng để định tuyến yêu cầu của user trong trình duyệt đến một hành động trong ứng dụng. Sau đó, nó diễn giải yêu cầu và sử dụng các Mô hình mà bạn có để cung cấp thông tin được yêu cầu ở một định dạng cụ thể (được xác định bởi các Chế độ xem cụ thể).

Đối với ứng dụng của ta , ta sẽ tạo một Controller có tên là PostsController trong một file có tên là PostsController.php nằm trong folder app / Controller . Sau đó, ban đầu ta dán đoạn mã sau (đảm bảo bạn thêm thẻ mở PHP ở đầu file ):

class PostsController extends AppController {
    public $helpers = array('Form');
    
    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }
}

Lớp này mở rộng lớp Bộ điều khiển CakePHP mặc định và khai báo một thuộc tính ($ helpers) trong đó nó lưu trữ một số thư viện trình trợ giúp CakePHP mà ta sẽ sử dụng sau này. Sau đó, nó tạo ra một phương thức index () ( phương thức được gọi theo mặc định nếu Bộ điều khiển không nhận được hướng dẫn sử dụng phương thức nào). Các phương thức trong CakePHP còn gọi là các hành động .

Hành động index () mà ta vừa tạo sử dụng phương thức set () được kế thừa từ Bộ điều khiển mẹ để chuyển dữ liệu từ Bộ điều khiển sang Chế độ xem ( ta sẽ tạo sau một phút nữa). Dữ liệu này được lưu trữ trong biến bài viết và được truy xuất từ Mô hình bài đăng sử dụng phương thức find ('tất cả') để truy xuất tất cả các bài đăng từ bảng database của ta . Lý do mà Mô hình có sẵn cho ta bằng cách sử dụng $ this-> Post là vì ta đã tuân theo các quy ước đặt tên CakePHP.

Bây giờ tất cả những gì ta phải làm là tạo View và ta sẽ nhận được một trang hiển thị tất cả các bài viết của ta .

Xem

Mục đích của Chế độ xem là hiển thị dữ liệu do Bộ điều khiển yêu cầu và do Mô hình cung cấp. Sử dụng Chế độ xem, ta đảm bảo ta giữ bản trình bày tách biệt với logic kinh doanh của ứng dụng của ta . Nhiệm vụ hiện tại là tạo một file View để hiển thị thông tin được truy xuất bằng phương thức index () mà ta đã khai báo ở trên.

Chế độ xem CakePHP nằm trong folder app / View bên trong một folder được đặt tên theo Bộ điều khiển mà chúng thuộc về. Sau đó, ta cần đặt file View của ta trong một folder có tên là Posts và đặt tên là index.ctp (sau khi phương thức yêu cầu nó). Bên trong, hãy đặt mã sau:

<h1>Blog posts</h1>

<?php foreach ($posts as $post): ?>
<p><?php echo $post['Post']['title']; ?> | <?php echo $post['Post']['created']; ?>

<?php endforeach; ?> <?php unset($post); ?>

Điều này sẽ tạo ra một trang trông rất đơn giản và xấu xí nhưng bạn sẽ hiểu rõ. Nó lặp lại qua mảng $ posts (mà ta đã đặt và truyền vào phương thức set () của Controller) và xuất ra tiêu đề và ngày tạo bài đăng của ta từ bảng. Vì vậy, để nhận thông tin này, hãy trỏ trình duyệt của bạn đến www.example.com/project/posts/ index hoặc đơn giản là đến www.example.com/project/posts (vì index () là hành động mặc định được gọi nếu không có phương thức nào được chỉ định ).

Và như bạn thấy , ứng dụng đã có thể thực hiện các thao tác đọc mà bạn không cần phải viết bất kỳ mã nào để truy vấn database .

Bạn sẽ nhận thấy rằng dữ liệu của bạn được hiển thị bên trong bố cục CakePHP mặc định (nằm trong ứng dụng / Chế độ xem / Bố cục ). Tất cả Chế độ xem là một phần của bố cục và bạn có thể tạo bao nhiêu tùy ý. Sau đó, tất cả những gì bạn phải làm là chỉ định bố cục trong Bộ điều khiển mà bạn muốn sử dụng. Ta sẽ tiếp tục với cái mặc định cho phần còn lại của hướng dẫn này vì nó được sử dụng tự động. Thông tin thêm về bố cục bạn có thể đọc ở đây .

Bây giờ ta hãy xem cách ta có thể hiển thị một bài đăng riêng lẻ trong một Chế độ xem riêng biệt.

Đối với điều này, ta cần thêm một phương thức khác vào PostsController . Vì vậy, bên dưới nơi bạn đã xác định phương thức index () , hãy dán đoạn mã sau:

 public function view($id = null) {
        $post = $this->Post->findById($id);
        $this->set('post', $post);
    }

Ở đây, vì ta chỉ tìm kiếm một bài đăng, nên mô hình Bài đăng sẽ sử dụng phương thức findById () và chuyển cho nó ID mà ta muốn. ID này sẽ đến từ hành động view () nhận một tham số được chuyển đến nó từ URL theo cách sau: www.example.com/posts/view/1 , 1 là ID của bài đăng ta cần. Sau đó, phương thức set () tương tự sẽ chuyển đến View một biến được gọi là post chứa thông tin bài đăng được truy xuất từ bảng. Đơn giản. Phương pháp này thực sự chứa mức tối thiểu trần tại thời điểm này. Bạn cũng nên thực hiện một số kiểm tra để xem liệu những gì được chuyển đến Bộ điều khiển có phải là ID hợp lệ hay không, v.v.

Bây giờ, hãy tạo View trong cùng một folder với folder ta đã tạo trước đó, có tên là view.ctp mà ta sẽ đặt đoạn mã sau:

<h1><?php echo h($post['Post']['title']); ?></h1>
<p><small>Created: <?php echo $post['Post']['created']; ?></small></p>
<p><?php echo h($post['Post']['body']); ?></p>

Bây giờ nếu bạn chuyển đến www.example.com/project/posts/ view / 1, bạn sẽ nhận được bài đăng với ID 1 (tiêu đề, ngày tạo và nội dung).

Kết luận

Trong hướng dẫn này, ta đã biết cách tạo thao tác đọc cơ bản trên dữ liệu của bạn bằng CakePHP. Ta đã khai báo một lớp Model cho các mô hình dữ liệu của ta (các bài đăng), sử dụng Bộ điều khiển để yêu cầu dữ liệu này và tạo một vài Chế độ xem đơn giản để hiển thị nó trong trình duyệt. Ngoài ra, ta đã thấy một chút sức mạnh của việc tuân theo các quy ước đặt tên được thực hiện bởi CakePHP. Làm như vậy, ta không cần phải viết bất kỳ truy vấn database nào cho dữ liệu của bạn và Model, Controller và View được "kết nối" một cách dễ dàng và ta không cần phải chỉ định quá nhiều.

Trong hướng dẫn tiếp theo, ta sẽ hoàn thiện ứng dụng nhỏ của bạn bằng cách thêm khả năng thêm các bài đăng vào bảng, chỉnh sửa chúng và cuối cùng là xóa chúng.

Bài viết gửi bởi: Danny

Tags:

Các tin liên quan

Cách mở rộng ứng dụng web trên Ubuntu 12.10
2013-04-11