Error message

  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Deprecated function: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in _filter_pubdlcnt() (line 50 of /home/mamast08nv/public_html/sites/all/modules/pubdlcnt/pubdlcnt.module).
  • Notice: Undefined offset: 1 in nice_menus_block_view() (line 306 of /home/mamast08nv/public_html/sites/all/modules/nice_menus/nice_menus.module).

Mô hình MVC được sử dụng nhiều trong lập trình nhữn ứng dụng với ASP.net. Trên thực tế mô hình MVC có thể được ứng dụng trong rất nhiều ngôn ngữ lập trình khác nhau. Hôm nay, chúng ta sẽ cùng nhau tìm hiểu tổng quan về mô hình MVC trong lập trình PHP.

Trước tiên chúng ta cần hiểu rõ về mô hình MVC là như thế nào, nó gồm những gì?

Model-View-Control (MVC), ban đầu được xây dựng vào cuối những năm 1970, là một mô hình kiến trúc phần mềm được xây dựng trên cơ sở trình bày dữ liệu tách biệt với các phương pháp tương tác với dữ liệu. Về lý thuyết, một hệ thống MVC phát triển tốt sẽ cho phép một người phát triển front-end và một người phát triển back-end có thể làm việc trên cùng một hệ thống mà không can thiệp, chia sẻ, hoặc chỉnh sửa các tập tin của một trong hai bên đang làm việc.

Các thành phần của mô hình MVC:

Model

Model được coi như cầu nối giữa 2 thành phần View và Controller nó chủ yếu chứa các thao tác với Cơ sở dữ liệu( CSDL) như cho phép: xem, truy xuất, xử lý dữ liệu,...

View

View là thành phần hiển thị dữ liệu, kết quả cuối cùng có được từ việc yêu cầu Model. Thông thường trong các ứng dụng web sử dụng MVC View là 1 phần của hệ thống nơi mà các thành phần HTML được tạo ra. Ngoài ra, View cũng có chức năng ghi nhận hoạt động của người dùng để tương tác với Controller.

Ví dụ:

Một nút "Xóa" được tạo ra bởi View sau khi người dùng nhấn vào nút thì sẽ có 1 hành động trong Controller.

Hiểu đơn giản thì View là phần giao diện của 1 ứng dụng web trong mô hình MVC có chức năng là hiển thị. Tuy nhiên cần lưu ý rằng View không có mối quan hệ trực tiếp nào với Controller, nó không được lấy dữ liệu ra từ Controller.

Controller

Thành phần cuối cùng của mô hình MVC là Controller. Nó được sử dụng để xử lý dữ liệu đầu vào từ người dùng. Có thể hiểu đơn giản nó như 1 người sưu tập thông tin sau đó chuyển vào Model để lưu trữ.

Chẳng hạn như chức năng thêm bài viết mới trong quản trị của 1 website có 2 trường nhập Tiêu đề và Nội dung bài viết thì:

+ View là phần hiển thị ra form nhập Tiêu đề và Nội dung

+ Controller lấy dữ liệu từ 2 trường dữ liệu đó gửi vào Model

+Model nhận dữ liệu từ Controller để lưu trữ trong CSDL

MVC trong PHP

Chúng ta có thể viết 1 ứng dụng web đơn giản dựa trên mô hình MVC như sau:

Lớp Model:

<?php

class Model

{

    public $string;

    public function __construct(){

        $this->string = "MVC + PHP = Awesome!";

    }

}

?>

Lớp View

<?php

class View

{

    private $model;

    private $controller;

    public function __construct($controller,$model) {

        $this->controller = $controller;

        $this->model = $model;

    }

    public function output(){

        return "<p>" . $this->model->string . "</p>";

    }

}

?>

Lớp Controller

<?php

class Controller

{

    private $model;

    public function __construct($model) {

        $this->model = $model;

    }

}

?>

Như vậy chúng ta đã tạo ra 3 lớp với 3 thành phần trong mô hình MVC. Công việc tiếp theo cần làm là chúng ta cần phải thiết lập mối quan hệ giữa chúng.

<?php

$model = new Model();

$controller = new Controller($model);

$view = new View($controller, $model);

echo $view->output();

?>

Như các bạn đã thấy ở đoạn mã trên chúng ta chưa có bất kỳ chức năng điều khiển cụ thể nào vì chúng ta chưa có tương tác nào với người dùng. Như vậy View nắm giữ hết vai trò của ứng dụng này và chức năng duy nhất là hiển thị.

Bây giờ chúng ta sẽ cùng nhau thêm 1 chức năng điều khiển cho nó!

<?php

class Model

{

    public $string;

    public function __construct(){

        $this->string = "MVC + PHP = Tuyệt vời ông mặt trời!";

    }

}

?>

<?php

class View

{

    private $model;

    private $controller;

 

    public function __construct($controller,$model) {

        $this->controller = $controller;

        $this->model = $model;

    }

 

    public function output() {

        return '<p><a href="mvc.php?action=clicked"' . $this->model->string . "</a></p>";

    }

}

?>

<?php

class Controller

{

    private $model;

 

    public function __construct($model){

        $this->model = $model;

    }

 

    public function clicked() {

        $this->model->string = "Đã cập nhật dữ liệu!"

    }

}

Vậy là chúng ta đã thêm 1 số chức năng cơ bản cho mô hình. Và bây giờ là mối quan hệ giữa 3 thành phần

<?php

$model = new Model();

$controller = new Controller($model);

$view = new View($controller, $model);

 

if (isset($_GET['action']) && !empty($_GET['action'])) {

    $controller->{$_GET['action']}();

}

echo $view->output();

?>

Chạy code bên trên và click vào link bạn sẽ thấy sự thay đổi dữ liệu của nó.