Bài 03: Thao tác với Controller trong Phalcon

DOWNLOAD

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
Trong bài này chúng ta sẽ tìm hiểu phần đầu tiên trong mô hình MVC đó là   Controller trong Phalcon.

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();
Cấu trúc folder lúc này như sau:

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 đó:

  • 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
{
  
}
Trong controller có đoạn code kế thừa từ lớp  \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()
{

}
Trong đó chữ Action là mặc định luôn luôn có, chúng ta chỉ đổi chữ name thôi.

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.

Như vậy để gọi tới một Controller và Action nào đó thì trên URL ta chỉ việc truyền theo cú pháp: 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ào actionName(thamso1, thamso2, thamso3)
  • Trên URL ta truyền thêm các tham số theo cú pháp domain.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>';
    }
}
Nào bây giờ bạn chạy lên với đường dẫn là: 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é.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.