MVC的原理是通过解析路由,获得参数,通过参数加载获取相对应的控制器和方法。
index.php实例
<?php //获得路由地址 $path=$_SERVER['REQUEST_URI']; $script_name=$_SERVER['SCRIPT_NAME']; $path=str_replace($script_name,'',$path); //解析路由 $path=ltrim($path,'/'); //分割获得的参数 $path=explode('/',$path); //将分割的路由参数第一个字母大写,用来对应控制器 $path[0]=ucfirst($path[0]); //获取类名 $controller=$path[0]; //获取方法 $method=$path[1]; //加载控制器 include_once __DIR__.'/controller/'.$controller.'Controller.php'; //加载模型 include_once __DIR__.'/model/'.$controller.'Model.php'; $obj=new HomeController(); echo $obj->$method();
运行实例 »
点击 "运行实例" 按钮查看在线实例
controller/HomeController.php实例
<?php class HomeController { public function index(){ return 'hello world'; } //添加访问视图的方法 public function view(){ require __DIR__.'/../view/home.php'; } public function model(){ //本来还在思考怎么才能用变量动态引入model和view,但是后来一想MVC一个控制器对应一个模型对应一个view,他们是一一对应的,应该不需要动态引入。 include_once __DIR__.'/../model/HomeModel.php'; $obj=new HomeModel('小新',18,'男'); $res=$obj->show(); return $res; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
model/HomeModel.php实例
这加载的一个模型,但是模型好像不应该这样用!
<?php class HomeModel{ public $name; public $age; public $sex; public function show(){ return '我的名字是'.$this->name.',今年'.$this->age.'岁了,如你所见我是'.$this->sex.'的。'; } public function __construct($name,$age,$sex) { $this->name=$name; $this->sex=$sex; $this->age=$age; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
view/home.php实例
<?php echo <<<DOC <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>演示视图页面</title> </head> <body> <h3>这是一个视图页面</h3> <div>看到这个页面说明视图加载成功</div> </body> </html> DOC;
运行实例 »
点击 "运行实例" 按钮查看在线实例
虽然大致搞懂了MVC加载的原理,MVC设计模式是通过解析路由来获得参数,通过参数来找到对应的控制器和方法,再通过控制器进而控制视图和模型。但依然不会写真正的MVC架构。
另外,composer的安装基本上都是下一步下一步只需要注意安装目录和选择PHP版本,更改了阿里云的全局配置,比较麻烦的是,我这不知道是网络问题还是什么鬼,根本打不开packagist,所以只能手动下载laravel,不过还是慢!!!