Hi, I am

Ngô Tôn

I am a programmer.

Home / Programming / Web Development / PHP / Tự xây dựng PHP Framework mô hình MVC

Tự xây dựng PHP Framework mô hình MVC

Bài hướng dẫn lập trình web: Tự xây dựng PHP Framework mô hình MVC

PHP Framework?

Hiện nay, lập trình hướng đối tượng (OOP) đã trở nên phổ biến và khá quen thuộc với dân lập trình. Lập trình OOP sẽ giúp lập trình viên đóng gói các lớp xử lý nghiệp vụ một cách dễ dàng; xây dựng các lớp nghiệp vụ mới kế thừa từ những lớp đã có; dễ dàng quản lý và phân phối. Các chuyên gia lập trình hiện nay thường sử dụng kỹ thuật này để xây dựng nên các bộ mã nguồn framework. Khi đó các lập trình viên khác có thể tái sử dụng lại framework đó, kế thừa và sử dụng các lớp nghiệp vụ nó hỗ trợ vào trong dự án của mình một cách dễ dàng và nhanh chóng, giúp giảm thời gian xây dựng và phát triển dự án, tiết kiệm kinh phí, giảm thiểu lỗi phát sinh và nhiều vấn đề khác. Vậy framework là gì? Và hiện nay có những PHP Framework nào phổ biến?

Framework là một bộ mã nguồn được xây dựng, phát triển và đóng gói – phân phối bởi các chuyên gia lập trình hoặc bởi các công ty lập trình. Nó sẽ cung cấp một cấu trúc phát triển chuẩn để các developer dựa vào đó xây dựng và phát triển các dự án. Đi kèm theo nó là một kho thư viện gồm nhiều lớp/ hàm xử lý được đặt trong các packages hoặc namespace riêng. Các chuyên gia lập trình sử dụng nhiều kỹ thuật lập trình và giải thuật/ thuật toán để xây dựng các lớp xử lý một cách tối ưu nhất, giải quyết các bài toán lập trình nhanh chóng và chính xác. Các lớp trong một framework sẽ làm việc tốt nhất với cấu trúc chuẩn mà framework đó cung cấp.

PHP là một ngôn ngữ script khá mạnh mẽ dùng để xây dựng website, và hiện nay nó cũng đang có rất nhiều framework tốt như: zend framework, symfony, yii framework, codeigniter… được rất nhiều developer ưa thích và sử dụng. Các PHP Framework đều được xây dựng theo chuẩn mô hình MVC( Model – View – Controller) và cung cấp rất nhiều lớp hỗ trợ xử lý về bảo mật, phân quyền, captcha, view helper, module manager, database, service… khi đó các lập trình viên sẽ xây dựng, phát triển website một cách dễ dàng và nhanh chóng.

Dưới đây là liệt kê danh sách các PHP Framework :

CodeIgniter Framework- http://codeigniter.com
Symfony Framework– http://www.symfony-project.org
Adventure PHP Framework – http://adventure-php-framework.org
Agavi Framework – http://www.agavi.org
Yii PHP Framework – http://www.yiiframework.com
Zend Framework – http://framework.zend.com
Akelos Framework – http://trac.akelos.org
ATK Framework – http://www.atk-framework.com
CakePHP Framework – http://cakephp.org
CoughPHP Framework –http://www.coughphp.com
evoCore Framework – http://evocore.net
eZ components Framework – http://ez.no/ezcomponents
Horde Application Framework – http://horde.org/horde/
InterJinn Framework – http://www.interjinn.com
Jelix Framework – http://jelix.org
KISSMVC Framework – http://kissmvc.com
KohanaPHP Framework – http://kohanaphp.com
Kolibri Framework – https://launchpad.net/kolibri
Konstrukt Framework – http://konstrukt.dk
LightVC Framework www.lightvc.org
Limb3 Framework – http://limb-project.com
Lion framework – http://www.lionframework.org
Pluf Framework – http://www.pluf.org
Prado Framework – http://www.pradosoft.com
Madeam PHP Framework – http://madeam.com
Maintainable PHP Framework -http://framework.maintainable.com
FUSE MVC Framework – http://www.phpfuse.net
Fusebox Framework – http://www.fusebox.org
OpenBiz Framework – http://www.phpopenbiz.org
P4A Framework – http://p4a.crealabsfoundation.org
PHP on TRAX Framework – http://www.phpontrax.com
PHPDevShell Framework – http://www.phpdevshell.org
PHOCOA Framework – http://phocoa.com
PhpPeanuts Framework – http://www.phppeanuts.org
PHPulse Framework – http://www.phpulse.com
Qcodo Framework – http://qcodo.com
QCubed Framework – http://qcu.be
PHP Work QPHP Framework – http://phpwork.org
Sapphire Framework – http://silverstripe.org/sapphire
Seagull Framework – http://seagullproject.org
SOLAR Framework – http://solarphp.com
Stubbles Framework – http://www.stubbles.net
Swat Framework – https://code.silverorange.com/wiki/Swat
Tangra Framework– tangraframework.net
Tigermouse Framework – http://tigermouse.epsi.pl
TinyMVC Framework – http://www.tinymvc.com
Xajax Framework – http://xajaxproject.org
Xataface Framework – http://xataface.com
ZOOP Framework – http://zoopframework.com

MVC là gì?

MVC hay (Model-View-Controller) là một mẫu kiến trúc phần mềm trong kỹ thuật kỹ sư phần mềm. Khi sử đúng cách, mẫu MVC giúp cho người phát triển phần mềm cô lập các nguyên tắc nghiệp vụ và giao diện người dùng một cách rõ ràng hơn. Phần mềm phát triển theo mẫu MVC tạo nhiều thuận lợi cho việc bảo trì vì các nguyên tắc nghề nghiệp và giao diện ít liên quan với nhau.

Trong mẫu Model-View-Controller, mô hình (model) tượng trưng cho dữ liệu của chương trình phần mềm. Tầm nhìn hay khung nhìn (view) bao gồm các thành phần của giao diện người dùng. Bộ kiểm tra hay bộ điều chỉnh (controller) quản lý sự trao đổi giữa dữ liệu và các nguyên tắc nghề nghiệp trong các thao tác liên quan đến mô hình.

mvc

Ngô Tôn Blog hướng dẫn cách xây dựng 1 MVC PHP Framework đơn giản từ mới bắt đầu đến kết thúc.
Theo như hình vẽ ở trên các bạn sẽ thấy các lớp như: Controller, Model, View được tách ra rõ rệt: Client request đến Controller, Controller sẽ quyết định có nên sử dụng Model hay trực tiếp qua View

Đầu tiên mà framework cần làm là tạo điểm bắt đầu (vd: index.php), đó là nơi mà cho phép tất cả các controller có thể thông qua và hoạt động.
Để làm điều này ta sử dụng mod_rewrite, 1 mặt giúp ta có thể tạo ra điểm bắt đầu để các controller hoạt động, 1 mặt giúp ta tạo ra 1 đường dẫn thân thiện (SEO URL) giúp các bộ máy tìm kiếm index nhanh hơn.

VD: File .htaccess sẽ viết lại đường dẫn cho ta có dạng:
http://www.example.com/blog/news
Nếu như không dùng thì dưởng dẫn ra có dạng:
http://www.example.com/index.php?rt=blog/news

Đây là file .htaccess của ứng dụng:

RewriteEngine on
# Cho nay la duong dan chinh cua thu muc lam viec (http://localhost/) => RewriteBase /
# Neu thuc muc la http://localhost/blog/ => RewriteBase /blog/
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]  

Cấu trúc của ứng dụng MVC:

– application
– controller
– includes
– model
– views
.htaccess
index.php
File index.php
Như đã đề cập trước đó, tập tin index.php là điểm duy nhất để chúng ta truy cập ứng dụng. Như vậy, nó cung cấp không gian lý tưởng để khai báo các biến và cấu hình trang web rộng. Trong tập tin này tôi cũng sẽ gọi một hay một vài tập tin trợ giúp để khởi tạo biến, cấu hình,…. Tập tin này sẽ được gọi là init.php và nó sẽ được đặt trong includes:/index.php:

<?php

 /*** error reporting on ***/
 error_reporting(E_ALL);

 /*** define the site path ***/
 $site_path = realpath(dirname(__FILE__));
 define ('__SITE_PATH', $site_path);

 /*** include the config.php file ***/
 include 'config.php';
  
 /*** include the init.php file ***/
 include 'includes/init.php';

?>

index.php thiết lập các báo cáo lỗi (error_reporting), include tập tin init.php, và define hằng số đường dẫn tĩnh của website (__SITE_PATH).
Và tại đây .htaccess sẽ bắt đầu xây dựng registry, các object registry này đã được xây dựng thông qua những biến toàn cục mà ta đã xây dựng, để tạo ra đối tượng này ta tạo ra init.php:

Dĩ nhiên là trước khi tạo ra tập tin này, chúng ta cần phải định nghĩa các lớp cần thiết cho hệ thống như: controller, registry, router, template. Các lớp này sẽ tự động include vào chương trình (bắt buộc để hệ thống hoạt động).

/includes/init.php

<?php

 /*** include the controller class ***/
 include __SITE_PATH . '/application/' . 'controller_base.class.php';
 
  /*** include the view class ***/
 include __SITE_PATH . '/application/' . 'view_base.class.php';

   /*** include the model class ***/
 include __SITE_PATH . '/application/' . 'model_base.class.php';
 
 /*** include the registry class ***/
 include __SITE_PATH . '/application/' . 'registry.class.php';

 /*** include the router class ***/
 include __SITE_PATH . '/application/' . 'router.class.php';

 /*** a new registry object ***/
 $registry = new registry;

?>
Registry là 1 đối tượng (registry object) cho phép lưu __set() và truy xuất __get() các biến mà ta không cần phải sử dụng biến toàn cục (global variable).
/application/registry.class.php
<?php

Class Registry {

 /*
 * @the vars array
 * @access private
 */
 private $vars = array();


 /**
 *
 * @set undefined vars
 *
 * @param string $index
 *
 * @param mixed $value
 *
 * @return void
 *
 */
 public function __set($index, $value)
 {
        $this->vars[$index] = $value;
 }

 /**
 *
 * @get variables
 *
 * @param mixed $index
 *
 * @return mixed
 *
 */
 public function __get($index)
 {
        return $this->vars[$index];
 }

}

?>

Chúng ta thấy có 2 phương thức tự động: __set() và __get() để tạo ra các biến sử dụng xuyên suốt trong chương trình như global variable. Cách sử dụng:

$registry->newval = 'This is value of variable name newval';
echo $registry->newval; 
Router:

Đây là lớp giúp mô hình MVC chọn đúng controller làm việc:

Ví dụ ta có 1 router sử dụng controller “news”:
http://www.example.com/index.php?rt=news
Nếu ta sử dụng mod_rewrite thì url có dạng:
http://www.example.com/news

/application/router.class.php:

<?php

class router {
 /*
 * @the registry
 */
 private $registry;

 /*
 * @the controller path
 */
 private $path;

 private $args = array();

 public $file;

 public $controller;

 public $action; 

 function __construct($registry) {
        $this->registry = $registry;
 } 

Phương thức khởi tạo class router sẽ giúp ta tạo mới 1 object router thông qua object $registry mà ta đã tạo sẵn trong init.php. Thêm đoạn mã sau để thực hiện tạo mới 1 router trong index.php:

*** load the router ***/
 $registry->router = new router($registry); 

Để chọn được thư mục controller làm việc ta viết thêm phương thức setPath trong router.class.php:

/**
 *
 * @set controller directory path
 *
 * @param string $path
 *
 * @return void
 *
 */
 function setPath($path) {

        /*** check if path i sa directory ***/
        if (is_dir($path) == false)
        {
                throw new Exception ('Invalid controller path: <code>' . $path . '</code>');
        }
        /*** set the path ***/
        $this-&gt;path = $path;
} 

…Và bây giờ ta truyền thư mục controller làm việc cho lớp router trong index.php:

/*** set the path to the controllers directory ***/
 $router->setPath (__SITE_PATH . 'controller'); 

Sau khi router kiểm tra tính hợp lệ của controller truyền vào qua phương thức setPath(), ta tiếp tục load controller:

/**
 *
 * @load the controller
 *
 * @access public
 *
 * @return void
 *
 */
 public function loader()
 {
    /*** check the route ***/
    $this->getController();

    /*** if the file is not there diaf ***/
    if (is_readable($this->file) == false)
    {
        $this->file = $this->path.'/error404.php';
                $this->controller = 'error404';
    }

    /*** include the controller ***/
    include $this->file;

    /*** a new controller class instance ***/
    $class = $this->controller . 'Controller';
    $controller = new $class($this->registry);

    /*** check if the action is callable ***/
    if (is_callable(array($controller, $this->action)) == false)
    {
        $action = 'index';
    }
    else
    {
        $action = $this->action;
    }
    /*** run the action ***/
    if(!empty($this->args))
        $controller->$action($this->args);
    else
        $controller->$action();
 }

Phương thức loader() sẽ triệu gọi phương thức getController() với ý nghĩa getController() sẽ thông qua query string: $_GET[‘rt’] mà ta truyền (http://example/index.php?rt=news/view/3) để xác định controller mà ta thực hiện.
Trong trường hợp với controller “news” với url (http://example/index.php?rt=news) thì controller sẽ sử dụng lớp news controller với phương thức index().
Trường hợp với controller “news/view” với url (http://example/index.php?rt=news/view/3) thì controller sẽ sử dụng lớp news controller với phương thức view($arg) với $arg[1] = 3.
Chúng ta sẽ hiểu rõ về router hơn ở phần viết 1 ứng dụng blog nho nhỏ!

/**
 *
 * @get the controller
 *
 * @access private
 *
 * @return void
 *
 */
private function getController() {

    /*** get the route from the url ***/
    $route = (empty($_GET['rt'])) ? '' : $_GET['rt'];

    if (empty($route))
    {
        $route = 'index';
    }
    else
    {
        /*** get the parts of the route ***/
        $parts = explode('/', $route);
        $this->controller = $parts[0];
        if(isset( $parts[1]))
        {
            $this->action = $parts[1];
        }
        if(isset( $parts[2]))
        {
            $count_args = count($parts);
            $k = 1;
            $args = array();
            for($i = 2; $i < $count_args; $i++)
                $args[$k++] = $parts[$i]; 
            $this->args = $args;
        }
    }

    if (empty($this->controller))
    {
        $this->controller = 'index';
    }

    /*** Get action ***/
    if (empty($this->action))
    {
        $this->action = 'index';
    }

    /*** set the file path ***/
    $this->file = $this->path .'/'. $this->controller . 'Controller.php';
}
Controller (C trong MVC) là 1 lớp trừu tượng định nghĩa ra tất cả các controller của ứng dụng, nó bao gồm: object $registry hỗ trợ truyền dữ liệu, object $model để lấy dữ liệu từ Model (M), object $view để truyền data và xuất View (V) phương thức mặc định index() cho controller không có action (task) như ví dụ truyền vào router với 2 tham số “news và news/view/id” ở ví dụ ở phần Router
/application/controller_base.class.php
<?php
Abstract Class baseController {

/*
 * @registry object
 */
protected $registry;
protected $model;
protected $view;

function __construct($registry) {
    $this->registry = $registry;
    $this->model = &baseModel::getInstance();
    $this->view  = &baseView::getInstance();
}


/**
 * @all controllers must contain an index method
 */
abstract function index();
}
?>
Model (M trong MVC) Thành phần xử lý các dữ liệu từ textfile, database, objects,…. baseModel sẽ được triệu gọi từ Controller khi cần đến, baseModel có nhiệm vụ thao tác với Database
/application/model_base.class.php
<?php
class baseModel {
    private static $instance;
    
    function __construct() {
        
    }
   public static function getInstance() {
        if (!self::$instance)
        {    
            self::$instance = new baseModel();
        }
        return self::$instance;
    }
    public function get($name){
        $file = __SITE_PATH.'/model/'.str_replace("model","",strtolower($name))."Model.php";
        
        if(file_exists($file))
        {
            include ($file);
            $class = str_replace("model","",strtolower($name))."Model";
            return new $class;
        }        
        return NULL;
    }
    function __destruct() {
    }
} 

Mở rộng thêm cho các bạn tham khảo:
Bạn có thể tạo 1 lớp PDO Active Record để dễ dàng trong khi truy vấn dữ liệu.

View (V trong MVC) là phần định dạng dữ liệu, gởi và nhận dữ liệu từ form, hiển thị html & css,…
View ngoài phương thức set dùng để gởi data từ controller sang, view còn phương thức show() để giúp controller
chọn lựa tên view cần sử dụng:

/application/view_base.class.php

 

<?php

Class baseView {


/*
 * @Variables array
 * @access public
 */
public $data = array();
private static $instance;

/**
 *
 * @constructor
 *
 * @access public
 *
 * @return void
 *
 */
function __construct() {

}

public static function getInstance() {
    if (!self::$instance)
    {    
        self::$instance = new baseView();
    }
    return self::$instance;
}
    
 /**
 *
 * @set undefined vars
 *
 * @param string $index
 *
 * @param mixed $value
 *
 * @return void
 *
 */
 public function __set($index, $value)
 {
        $this->vars[$index] = $value;
 }


function show($name) {
    $path = __SITE_PATH . '/views' . '/' . $name . '.php';

    if (file_exists($path) == false)
    {
        throw new Exception('Template not found in '. $path);
        return false;
    }

    // Load variables
    foreach ($this->data as $key => $value)
    {
        $$key = $value;
    }

    include ($path);               
}


}

?>
Viết 1 ứng dụng blog có chức năng như sau:
1/ Nếu người dùng truy cập http://example.com/ thì sẽ xuất ra màn hình dòng chữ “Welcome to My Blog!”
Mặc định nếu người dùng không gõ Controller, thì hệ thống sẽ chọn lấy indexController để làm việc (nếu không có thì sẽ dùng /controller/error404.php)Ta tạo: /controller/error404.php khi không tìm thấy Controller thì sẽ hiển thị ra nội dung:

<?php

Class error404Controller Extends baseController {

    public function index() 
    {
        $this->view->data['blog_heading'] = 'This is the 404';
        $this->view->show('error404');
    }
}
?>

 

Với error404Controller có sử dụng View “error404”.
Ta tạo /views/error404.php có nội dung sau:

<h1><?php echo $blog_heading; ?></h1>
<p>This is a custom 404 error page.</p>
<p>You can put whatever content you like here such as search for your site</p> 

Tiếp theo ta tạo Controller Index:
Ta tạo: /controller/indexController.php với phương thức index() là phương thức mặc định:

<?php
Class indexController Extends baseController {
    public function index() {
        /*** set a template variable ***/
            $this->view->data['welcome'] = 'Welcome to My Blog!';
        /*** load the index template ***/
            $this->view->show('index');
    }

}
?>

 

Với indexController có sử dụng View “index”.
Ta tạo /views/index.php có nội dung sau:

<h1><?php echo $welcome; ?></h1> 

Như vậy là xong, bây giờ ta test kết quả:
http://example.com/ thì sẽ xuất ra màn hình dòng chữ “Welcome to My Blog!”
http://example.com/noway thì sẽ xuất ra thông báo lỗi không tìm thấy trang.

2/ Nếu người dùng truy cập http://example.com/blog thì sẽ xuất ra màn hình tất cả các bài Blog
Đầu tiên ta tạo 1 database đơn giản có tên “framework” và 1 table “blog” gồm 3 trường id, name và content.

CREATE TABLE IF NOT EXISTS <code>blog</code> (
  <code>blog_id</code> int(11) NOT NULL AUTO_INCREMENT,
  <code>name</code> varchar(50) NOT NULL,
  <code>content</code> varchar(500) NOT NULL,
  PRIMARY KEY (<code>id</code>)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Dumping data for table <code>blog</code>
--

INSERT INTO <code>blog</code> (<code>blog_id</code>, <code>name</code>, <code>content</code>) VALUES
(1, 'MVC Introduction', 'This is content of MVC Introduction'),
(2, 'PHP framework', 'This is a content of PHP framework');

Tiếp theo ta cấu hình kết nối trong: /config.php

<?php
define('DB_NAME', 'framework'); // Database name
define('DB_USER', 'root'); // User database
define('DB_PASSWORD', 'vertrigo'); // Password database
define('DB_HOST', 'localhost'); // IP host
?>

Tương tự như index Controller ta tạo ra blog Controller với action index() cho chức năng này:

/controller/blogController.php

<?php
Class blogController Extends baseController {

    public function index() 
    {
        $this->view->data['blogs'] = $this->model->get('blogModel')->get_blogs();
        $this->view->data['blog_heading'] = 'This is the blog Index';
        $this->view->show('blog_index');
    }
}
?>

Với blogController có sử dụng model “blogModel” với phương thức get_blogs().
Ta tạo /model/blogModel.php có chứa phương thức get_blogs() lấy tất cả các blog trong CSDL:

<?php

Class blogModel Extends baseModel {
    public function get_blogs() 
    {
         global $db;
         $blog = $db->query('SELECT blog_id, name, content FROM blog');
         return $db->fetch_object();
    }
}
?>

 

Với blogController có sử dụng view “blog_index”.
Ta tạo /views/blog_index.php có nội dung sau:

<h1><?php echo $blog_heading; ?></h1>

<ul>
<?php foreach($blogs as $blog) : ?>
<li>Blog id <?php echo $blog->blog_id; ?>: 
    <a href="blog/view/<?php echo $blog->blog_id; ?>"><?php echo $blog->name; ?></a></li> 
<?php endforeach; ?>
</ul> 

Như vậy là xong, chúng ta test kết quả:
http://example.com/blog thì sẽ xuất ra màn hình tất cả các bài Blog:

This is the blog Index
Blog id 1: MVC Introduction
Blog id 2: PHP framework

3/ Nếu người dùng truy cập http://example.com/blog/view/id thì sẽ xuất ra màn hình chi tiết của bài blog có id là “id”

Tương tự như blog Controller ta bổ sung blogController với action view() cho chức năng này:
/controller/blogController.php

 

<?php

Class blogController Extends baseController {

    public function index() 
    {
        $this->view->data['blogs'] = $this->model->get('blogModel')->get_blogs();
        $this->view->data['blog_heading'] = 'This is the blog Index';
        $this->view->show('blog_index');
    }

    public function view($args){
        $id_blog = $args[1];
        $blog_detail = $this->model->get('blogModel')->get_blog_detail($id_blog);
        $this->view->data['blog_heading'] = $blog_detail->name;
        $this->view->data['blog_content'] = $blog_detail->content;
        $this->view->show('blog_view');
    }

}
?>

 

Với action view() có sử dụng model “blogModel” với phương thức get_blog_detail().
Ta bổ sung /model/blogModel.php phương thức get_blog_detail($id) cho phép lấy thông tin blog có id là $id:

<?php

Class blogModel Extends baseModel {
    public function get_blogs() 
    {
         global $db;
         $blog = $db->query('SELECT blog_id, name, content FROM blog');
         return $db->fetch_object();
    }
    public function get_blog_detail($id) 
    {    
         global $db;
         $blog = $db->query('SELECT blog_id, name, content FROM blog where blog_id = '.$db->sqlQuote($id));
         return $db->fetch_object($first_row = true);
    }

}
?>

 

Với blogController có sử dụng view “blog_view”.
Ta tạo /views/blog_view.php có nội dung sau:

<h1><?php echo $blog_heading; ?></h1>
    <p><?php echo $blog_content; ?></p> 

Như vậy là xong, chúng ta test kết quả:
http://example.com/blog/view/1 thì sẽ xuất ra màn hình chi tiết của bài blog có id là 1

MVC Introduction
This is content of MVC Introduction 

Kết thúc: Qua bài tutorial khá là dài, mình cố gắng xây dựng rất chi tiết mô hình MVC này, mong các bạn đóng góp ý kiến để bài viết hoàn thiện hơn.

Lưu ý:
– Đây là mô hình MVC cốt lõi rất đơn giản, đối với 1 mô hình hoàn thiện cần phải có thêm 1 số xử lý khác như: helper (chứ các function làm việc), library (các thư viện hỗ trợ, có thể mở rộng), languages (đa ngôn ngữ), cache (giúp ứng dụng chạy nhanh hơn),… và còn nhiều thành phần khác mà bạn hãy tự khám phá nhé!
– Với mô hình này bạn có thể phát triển thêm rất nhiều tùy ý bạn, nhưng mình khuyên sau khi chạy và hiểu rõ sự hoạt động mô hình này, hãy bắt đầu ngay với 1 framework như CI (CodeIgniter ) để bạn hiểu sâu hơn, đồng thời nó đã xây dựng tất cả các xử lý mà tôi vừa trình bày, khi bạn viết bạn sẽ tập trung vào ứng dụng của mình hơn so với xây dựng 1 framework rất mất thời gian!
– Nếu đơn giản cho bạn phát triển thêm theo mô hình MVC hãy chọn ngay CMS với joomla, với shop hãy chọn Open cart: http://www.opencart.com/ đã xây dựng đầy đủ trang quản trị và các ngôn ngữ, cùng với các chức năng tin tức và sản phẩm, bạn chỉ viết thêm 1 số tính năng như giá vàng, thanh toán ngân lượng, quảng cáo,…

Hi vọng bài viết có ích cho bạn! Chúc bạn thành công!

 

Bài hướng dẫn lập trình web: Tự xây dựng PHP Framework mô hình MVC PHP Framework? Hiện nay, lập trình hướng đối tượng (OOP) đã trở nên phổ biến và khá quen thuộc với dân lập trình. Lập trình OOP sẽ giúp lập trình viên đóng gói các lớp xử lý nghiệp vụ một cách dễ dàng; xây dựng các lớp nghiệp vụ mới kế thừa từ những lớp đã có; dễ dàng quản lý và phân phối. Các chuyên gia lập trình hiện nay thường sử dụng kỹ thuật này để xây dựng nên các bộ mã nguồn framework.…

User Rating: 5 ( 2 votes)

About ngoton

Ngô Tôn is a programmer. He is crazy about new gadgets and up to date with latest technology trends. Use comments to notify any issues you are facing.

Check Also

Nhật ký lập trình – Web Development [Chapter 1]

Ngô Tôn  xin giới thiệu tới các bạn loạt bài viết về lập trình – …

Leave a Reply

Your email address will not be published. Required fields are marked *