Bài 03: Thao tác với Controller trong Phalcon
Phalcon hoạt động theo mô hình MVC nên nó sẽ có một file index.php
làm file bootstrap, file này có nhiệm vụ khai báo thư viện, cấu trúc của ứng dụng Phalcon. Điều này rất khác với các Framwork khác là khi download về nó đã có sẵn mô hình cho chúng ta sử dung nhưng với Phalcon thì bạn hoàn toàn có thể tạo cấu trúc cho riêng mình (nhưng vẫn hoạt động theo mô hình MVC).
Trước khi vào vấn đề chính tìm hiểu Controller thì ta quay lại bài xây dựng cấu trúc folder cho ứng dụng phalcon để xem cấu trúc nó như sau:
project_name/
/app/
/cache/
/config/
/controllers/
/models/
/views/
/public/
/bootstrap/
/css/
/js/
/index.php
1. Khai báo Controller trong Phalcol
Với cấu trúc folder ở trên thì tất cả các controller trong Phalcon chúng ta sẽ đặt trong folder app/controllers
, lý do là ở file index.php
(file bootstrap) chúng ta có khai báo đoạn mã:
$loader = new \Phalcon\Loader(); $loader->registerDirs(array( 'app/controllers/', // Khai báo Folder Controller 'app/models/' // Khai báo models ))->register();
project_name/ /app/ /cache/ /config/ /controllers/ /ProductController.php /models/ /views/ /public/ /bootstrap/ /css/ /js/ /index.php
Cũng như các Framwork khác thì tên controller cũng phải có nguyên tắc riêng của nó. Với Phalcon thì tên file controller sẽ có dạng là NameController.php, trong đó:
Bài viết này được đăng tại [free tuts .net]
- Name là tên của controller
- Controller là hậu tố để phân biệt với các lớp khác (tránh trùng tên class)
Cũng giống như đặt tên file, việc khai báo tên class của controller cũng phải có nguyên tắc là sẽ giống như tên file vậy, ví dụ:
class IndexController extends \Phalcon\Mvc\Controller { }
\Phalcon\Mvc\Controller
, đây chính là thư viện của Phalcon nên chúng ta không quan tâm nó.
2. Khai báo Action của Controller trong Phalcon
Để khai báo action chúng ta dùng cú pháp như sau:
public function nameAction() { }
3. Ví dụ Tạo Controller mới trong Phalcon
Tham số controller là gì?
Tham số của controller chính là các giá trị bạn muốn truyền vào Controller để Controller nhận và xử lý. Ví dụ bạn truy cập vào đường dẫn http://localhost/project_name/controller/action/param1/param2 thì:
- controller: Là tên controller
- action: là tên action
- param1: là tham số 1 của action
- param2 là tham số 2 của action
Giả sử bạn viết trang hiển thị chi tiết bài viết thì ta sẽ truyền ID bài viết vào Action để Action lấy ID đó và truy vấn dữ liệu, lúc này URL ta có dạng như http://localhost/news/detail/2 thì:
- news: tên controller
- detail: tên action
- 2: là tham số có giá trị là 2
Trường hợp không có tham số
Bây giờ chúng ta sẽ thực hành tạo các controller và action mới, trước tiên bạn tạo file ProductController.php
nằm trong folder app/controllers. Sau đó điền nội dung sau vào:
class ProductController extends \Phalcon\Mvc\Controller { public function indexAction() { echo '<h3>Index Action</h3>'; } }
Bây giờ bạn mở trình duyệt và chạy URL là localhost/project_name/product/index, lúc này trên trình duyệt sẽ xuất hiện dòng "Index Action". Bây giờ bạn thử chạy với URL là localhost/project_name/product thì kết quả vẫn tương đương, lý do là do ta không truyền Action vào nên nó tự lấy Action mặc định là index
.
domain.com/controllerName/actionName
Trường hợp có tham số
Cũng giống như các Framwork khác, để truyền tham số vào controller thì bạn sẽ làm các bước như sau:
- Tại
action
ta khai báo các tham số truyền vàoactionName(thamso1, thamso2, thamso3)
- Trên
URL
ta truyền thêm các tham số theo cú phápdomain.com/controllerName/actionName/thamso1/thamso2/thamso3
..., số lượng tham số khôn giới hạn, tùy thuộc vào action của bạn có bao nhiêu.
Ví dụ: bạn thay đổi một chút trong controller ProductController trên:
class ProductController extends \Phalcon\Mvc\Controller { public function indexAction($thamso1, $thamso2, $thamso3) { echo '<h3>',$thamso1,$thamso2,$thamso3,'</h3>'; } }
localhost/project_name/product/index/hoc/lap/trinh
và kết quả sẽ in ra trình duyệt là "hoc lap trinh"
Nếu bạn truyền URL
không đủ tham số thì sẽ báo lỗi đấy, lý do là tham số truyền vào mình không gán giá trị mặc định (Default Value) cho nó, bây giờ bạn chỉnh lại như sau là OK:
class ProductController extends \Phalcon\Mvc\Controller { public function indexAction($thamso1 = '', $thamso2 = '', $thamso3 = '') { echo '<h3>',$thamso1,$thamso2,$thamso3,'</h3>'; } }
Lời kết
Các bạn thấy Phalcon cũng không khó phải không nào, nếu bạn đã từng học qua một Framework khác thì nó quá là đơn giản, nhưng nếu bạn chưa từng học Framework nào thì nó là cơn ác mộng với bạn đấy vì ta không biết trong bộ thư viện của nó có gì.
Bài này mục đích giới thiệu các hoạt động của Controller trong Phalcon, chúc các bạn học tốt nhé.