Hướng dẫn php mvc code thuần

PHP là ngôn ngữ mạnh mẽ được sử dụng trong lập trình website. Hiện nay có nhiều Framework PHP được nhiều người ưa chuộng. Trong số đó phải kể đến một số cái tên như Laravel, Codeigniter, Zend, Symfony, Yii… Tuy nhiên để học nhanh Framework thì bạn phải thành thạo PHP thuần trước đã.

Nội dung chính Show

  • Và cấu trúc thư mục 
  • Cấu trúc đường dẫn MVC
  • Các bước tạo MVC trong PHP thuần

Bài viết này sẽ giúp bạn hiểu rõ hơn về mô hình MVC. Cách thức hoạt động cũng như hiểu rõ hơn về lập trình hướng đối tượng OOP được
sử dụng trong Framework.

  • Hướng dẫn xây dựng MVC trong PHP thuần
    • Và cấu trúc thư mục 
    • Cấu trúc đường dẫn MVC
    • Các bước tạo MVC trong PHP thuần

Khi được học MVC thì bạn sẽ biết rằng nó bao gồm Models, Controllers và Views. Models sẽ đảm nhận vai trò thao
tác với cơ sở dữ liệu. Controllers là bộ điều khiển trung tâm, mọi hoạt động đều phải đi qua Controller. Còn Views sẽ nhận dữ liệu từ Controllers rồi in dữ liệu lên trình duyệt.

Để xây dựng được mô hình MVC bạn cần phải đọc qua các bài viết như:

  • Hàm __construct và __destruct trong PHP
  • Tìm hiểu Class trong
    PHP
  • Public, Private, Protected trong PHP
  • Từ khóa this, self trong PHP
  • Namespace trong PHP

Và cấu trúc thư mục 

Hướng dẫn php mvc code thuần

Các thư mục cần tạo đó là:

  • Config -> Trong Config chứa file config.php
  • Controllers -> Trong
    Controllers chứa file BaseController.php
  • Models -> Trong Models chứa file Model.php
  • Views -> Trong Views chứa home.php để hiển thị nội dung
  • index.php

Cấu trúc đường dẫn MVC

http://localhost/MVCPHP/index.php/BaseController/index

Qua cấu trúc đó bạn sẽ thấy rằng mọi Request đều phải đi qua tập tin index.php. Nó đóng vai trò quan trọng trong mô hình MVC.

Tiếp theo là
BaseController đây là Class nằm trong tập tin BaseController. Tên Class phải trùng vời tên tập tin.

Cuối cùng là phương thức index. Phương thức này tùy tùy vào nhu cầu bạn đặt. Có thể đặt là homepage, create, display vv…

Các bước tạo MVC trong PHP thuần

Bước 1: Bạn sẽ tạo file Model.php nằm trong thư mục Models

<?php

namespace App\Models;

use App\Config\DBConnect as DBConnect;

class Model
{

    protected $connect;
    protected $data;
    protected $result;

    public function __construct()
    {
        $this->connect = new DBConnect();
        $this->data = $this->connect->connect();
    }

    public function getData() {
        $sql = "SELECT * FROM admin";
        $result = mysqli_query($this->data, $sql);
        return $result;
    }
}

Bước 2: Tạo file NewController.php trong thư
mục Controllers

<?php

namespace App\Controllers;

use App\Models\Model;

Class NewController
{
    protected $load;

    public function index()
    {
        echo 'Trang chu';
    }
    
}

Bước 3: Tạo tập tin home.phpViews

Trang chu

Bước 4: Tạo file config.php

<?php
    define('BASEURL', 'http://localhost/MVCPHP/');
    define('DB_HOST','localhost');
    define('DB_USER','root');
    define('DB_PASS','');
    define('DB_NAME','database');
    define('SITENAME','APP');
?>

Bước 6: Tạo file index.php

Index là nơi mọi dữ liệu đi qua vì thế cần phải load các file khác vào trong nó. Tiếp theo bạn cần tạo router để chạy khớp controller và hàm để chạy.

<?php

require_once __DIR__. '/Config/config.php';
require_once __DIR__ . '/autoload.php';
require_once __DIR__ . '/Route/Router.php';
require_once __DIR__ . '/controllers/BaseController.php';

$router = new Router;

// Add the routes
$router->add('index', ['controller' => 'BaseController', 'action' => 'index']);
$router->add('{controller}/{action}');
    
$router->dispatch($_SERVER['QUERY_STRING']);

Xong xuôi mọi thứ bạn gõ lên trình duyệt http://localhost/MVCPHP/index để chạy xem kết quả nhé.

Nếu muốn include file tại Views
bạn hãy sửa lại hàm ở trong NewController.php thành

public static function index() {
    include './Views/home.php';
}

Bài viết này đã giới thiệu về mô hình MVC bằng PHP thuần. Tuy nhiên cấu trúc file chưa được chuẩn lắm. Bạn có thể tham khảo cách cấu trúc thư mục giống như Laravel hoặc Codeigniter nhé.