MVC PHP – Viết thư viện load view – Freetuts

Vậy là chúng ta đã viết được các lớp load library, load helper, load config rồi nhỉ, vậy thì trong bài này chúng ta sẽ viết thư viện load view. Đây là một thư viện khá là quan trọng và trong đối tượng này có sử dụng một số hàm có thể hơi mới lạ nên nếu hàm nào không hiểu thì bạn comment hoặc google để tra nhé. 

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Như thường lệ mình sẽ đăng cấu trúc file và thư mục tính đến cuối bài này như sau .

load-view-trong-controller3.png

Trước tiên ta cần tìm hiểu và khám phá định nghĩa về View và 1 số ít thông tin quan trọng tương quan đến view trong project MVC PHP của tất cả chúng ta .

1. View là gì?

View là một thành phần trong mô hình MVC và nhiệm vụ của nó là lấy dữ liệu từ controller và in ra các đoạn mã HTML, mỗi action thông thường sẽ có một view tương ứng. Ví dụ bạn có action news_detail thì bạn sẽ có một view news_detail

Bài viết này được đăng tại [ không tính tiền tuts. net ]

Trong serie này mình chỉ hướng dẫn cách viết thư viện load view đơn giản nên nếu sau này bạn thấy không hay thì có thể bổ sung thêm, chủ yếu là bạn đang học và bạn cần một ví dụ cụ thể để xem chứ không nên  lấy ví dụ đó để làm project cho riêng mình.

Trong project MVC PHP này các file view sẽ được đặt trong thư mục admin/view, trong đó admin là tên module hiện tại.

2. Viết thư viện view loader

Bạn tạo một file FT_View_Loader.php nằm trong thư mục system/core/loader và copy nội dung sau:

__content[] = $content;
    }
    
    /**
	 * Show view
     * 
     * @desc    Hàm hiển thị toàn bộ view đã load, được dùng ở controller
	 */
    public function show()
    {
        foreach ($this->__content as $html){
            echo $html;
        }
    }
}

Ở đây mình có hai phương pháp chính là :

  • load() dùng để load view bạn cần load. Nó có hai tham số là tên viewdatacontroller muốn truyền qua view.
  • show() dùng để hiển thị view, hàm này sẽ được gọi ở cuối controller

3. Thêm view loader vào FT_Controller

Như thường lệ để sử dụng được thư viện view loader thì ban phải khởi tạo nó trong FT_Controller.

Bạn mở file FT_Controller.php lên và tìm đến hàm khởi tạo bổ sung đoạn code sau vào cuối hàm:

// Load View
require_once PATH_SYSTEM. '/core/loader/FT_View_Loader.php';
$this->view = new FT_View_Loader();

Và đây là hàng loạt code cho hàm khởi tạo cho tới thời gian này .

public function __construct() 
{
    // Loader cho config
    require_once PATH_SYSTEM. '/core/loader/FT_Config_Loader.php';
    $this->config   = new FT_Config_Loader();
    $this->config->load('config');

    // Loader Library
    require_once PATH_SYSTEM. '/core/loader/FT_Library_Loader.php';
    $this->library = new FT_Library_Loader();

    // Load Helper
    require_once PATH_SYSTEM. '/core/loader/FT_Helper_Loader.php';
    $this->helper = new FT_Helper_Loader();

    // Load View
    require_once PATH_SYSTEM. '/core/loader/FT_View_Loader.php';
    $this->view = new FT_View_Loader();
}

Ok như vậy là xong rồi đấy .

4. Tạo mới một view

Bạn tạo một file tên là view.php nằm trong thư mục admin/view, sau đó copy nội dung sau vào:





    
        
        
        
    
    
        
        
        
CONTENT

Vậy là bạn đã tạo xong một view rồi đấy, giờ đây ta sẽ load view này trong controller nhé

5. Load view trong Controller

Bạn tạo mới một controller tên là View_Controller và copy nội dung sau vào:

view->load('view');
        
        // Show view
        $this->view->show();
    }
}

Ok giờ đây bạn ra trình duyệt gõ URL http://localhost/mvc/admin.php?c=view bạn sẽ thấy Open một giao diện nhu sau tức là mọi chuyện đã ok .

/load-view-trong-controller.png

6 Truyền Data từ controller sang view

Nếu bạn muốn truyền data từ controller qua view thì bạn sử dụng tham số thứ hai trong phương thức load().

$this->view->load('view', $data);

Trong đó $data có dạng mảng key => value và sau khi chuyển sang view nó sẽ có một biến $key = value, lúc này bạn chỉ việc echo $key là được.

Để rõ hơn thì ta làm ví dụ sau .

Bước 1: Bạn sửa lại View_Ccontroller như sau

 'Chào mừng các bạn đến với freetuts.net'
        );
        
        // Load view
        $this->view->load('view', $data);
        
        // Show view
        $this->view->show();
    }
}

Bước 2: Vào admin/view/view.php sửa lại nội dung như sau:





    
        
        
        
    
    
        
        
        
CONTENT

Chạy lên giao diện sẽ như sau:

/load-view-trong-controller2.png

Ok mọi chuyện đã xử lý xong và bạn hoàn toàn có thể đi ngủ được rồi đấy : D .

7. Lời kết

Trong bài này quan trọng nhất là bạn phải hiểu phương thức load() trong đối tượng view loader, bạn chú ý mình có dùng hàm extract để chuyển mảng dữ liệu dạng key => value thành tường biến tương ứng $key = value. Còn ob_start() là hàm sẽ báo cho PHP biết chúng ta đang load dữ liệu và không cần in ra cho nên bạn chỉ cần sử dụng hàm ob_get_contents() để lấy nội dung trong. Bài tiếp theo chúng ta sẽ tìm hiểu Base_Controller nhé.