Home > Article > Backend Development > PHP MVC model development (1): unified site entrance_PHP tutorial
This article introduces how to use PHP to implement files developed in the MVC pattern. Technical articles about the MVC model are available everywhere on the Internet, so this document will no longer describe the advantages and disadvantages of this model (in fact, I can't tell clearly), but only its PHP technology implementation. And in the future series of articles, we will also focus on technology.
1. Implement a unified website entrance (call the Controller layer method in MVC, that is, the control layer)
You may often see such a path on the Internet (http://www.aaa.com/aaa/bbb/aaa?id=5), which is puzzling. There are several possibilities for implementing such a website:
1. Hidden file extensions, There are different opinions on the benefits of this approach, but I personally think it is not necessary;
2. Use the redirection rules of the website to implement the virtual path;
3. Force file parsing to implement the virtual path.
Using the 23rd method can realize the unified interface of the website, reasonably integrate the website, and better reflect the security and architecture of the website. Most websites using these two methods are built and implemented using the "MVC" model.
The following is an example
The access path is as follows:
……/test/*******/Bad
……/test/*******/Good
("**" can be replaced with any string, "....." is your web path) The directory structure of the
file is as follows
|-- .htaccess
|-- test
|-- Application.php
|-- Controler/GoodControler.php
|-- Controler/BadControler.php
Pay attention to the file ".htaccess", which cannot be created directly under Windows. It can be created in command line mode.
File 0: (.htaccess) (This file is used to change the configuration method of apache)
forcetype application/x-httpd-php
File test.php
/*---- ----------------------------------
* test.php
*
* As you The file of the website entrance
* Used to initialize and entrance
* Call to execute the Controller call
*
------------------- ------------------*/
require "Application.php";
$aa = new Application();
$aa->parse ();
$aa->go();
?>
File GoodControler.php
/*---- ----------------------------------
* GoodControler.php
*
* Used Control access from url=/test/Good
*
---------------------------------- ----*/
class GoodControler{
/*
* The calling method of the control class, the only interface reported to the outside
*/
function control(){
echo "this is from GoodControler url=<🎝><🎝>*/test/Good";
}
}
?>
File BadControler.php
/*----------------------------------------
* BadControler.php
*
* Used to control access from url=/test/Bad
*
---------------- ------------------*/
class BadControler{
/*
* The calling method of the control class, the only interface that reports leakage to the outside
*/
function control(){
echo "this is from GoodControler url=<🎝><🎝>*/test/Bad";
}
}
?>
File Application.php
/*------------------------ -------------
* Application.php
*
* Used to implement a unified entrance to the website, calling the Controller class
*
---- ----------------------------------*/
class Application{
//Used to record the required The operation performed
var $action;
//The path name of the controller file
var $controlerFile;
//The class name of the controller
var $controlerClass;
function Application(){
}
function parse(){
$this->_parsePath();
$this->_getControlerFile();
$this-> ;_getControlerClassname();
}
/*
* Parse the current access path and get the action to be performed
*/
function _parsePath(){
list($path, $ param) = explode("?", $_SERVER["REQUEST_URI"]);
$pos = strrpos($path, "/");
$this->action = substr($path, $ pos 1);
}
/*
* Through the action $action, parse the path to the controller file used by the $action
*/
function _getControlerFile(){
$this->controlerFile = "./Controler/".$this->action."Controler.php";
if(!file_exists($this->controlerFile))
die(" Controller file name (".$this->controlerFile.") parsing error");
require_once $this->controlerFile;
}
/*
* Parse through action $action Get the controller class name
used by the $action */
function _getControlerClassname(){
$this->controlerClass = $this->action."Controler";
if( !class_exists($this->controlerClass))
die("Controler class name (".$this->controlerClass.") parsing error");
}
/*
* Call the controller and perform the action of the controller
*/
function go(){
$c = new $this->controlerClass();
$c ->control();
}
}
?>
The next section will continue to explain the MVC model development in PHP.