批改状态:合格
老师批语:现在学到laravel, 尽快跟上
MVC的原理是通过解析路由,获得参数,通过参数加载获取相对应的控制器和方法。
<?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();点击 "运行实例" 按钮查看在线实例
<?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;
}
}点击 "运行实例" 按钮查看在线实例
这加载的一个模型,但是模型好像不应该这样用!
<?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;
}
}点击 "运行实例" 按钮查看在线实例
<?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,不过还是慢!!!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号