1、下载安装composer,并把源设置为中国区镜像或阿里云镜像。
2、根据课堂案例,练习一下mvc的实现原理
一、安装compower,下载源设置为中国区镜像或阿里云镜像
Composer 是 PHP 的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer 会自动安装这些依赖的库文件。
Composer 默认情况下不是全局安装,而是基于指定的项目的某个目录中(例如 vendor)进行安装。
Composer 需要 PHP 5.3.2+ 以上版本,且需要开启 openssl。
Composer 可运行在 Windows 、 Linux 以及 OSX 平台上。
默认情况下执行 composer 各种命令是从国外的 composer 官方镜像源获取需要安装的具体软件信息,所以在不使用代理、不***的情况下,从国内访问国外服务器的速度相对比较慢。
composer可以通过设置国内镜像来下载依赖库,以阿里云镜像为例:
阿里云镜像与 Packagist 官方实时同步,推荐使用最新的 Composer 版本。最新版本: 1.9.0下载地址: https://mirrors.aliyun.com/composer/composer.phar
设置方法如下:
二、练习MVC的实现原理
【1】创建如下目录结构、文件
controller:控制器
--- Home.php类文件:派发功能;
model:模型(业务逻辑 or 数据库功能模块)
---checklogin.php:ajax登录验证模块;
---Show.php:模拟展示文章详情 模块;
view:视图
---longin.html:登录页面;
static:需加载的静态资源
---jquery类库;
Autoloader.php:自动加载类文件;
Router.php:路由解析类文件;
index.php:入口文件;
【2】不同url的运行结果如下图:
http://www.php.com/mytest/1031mvc/index.php -->进入 登录页面:(或者直接访问http://www.php.com/mytest/1031mvc/index.php/home/login)
http://www.php.com/mytest/1031mvc/index.php/home/index -->登录成功进入 默认页面:
http://www.php.com/mytest/1031mvc/index.php/show/details --> 模拟文章详情页面:
【3】代码实例:
实例 ----- index.php入口文件 <?php include 'Router.php'; //通过Router类 解析地址,找到指定控制器中对于的模块方法; Router::get(); // Router::get('abcd', function () {echo '我的abcd';}); ?> 运行实例 »点击 "运行实例" 按钮查看在线实例
实例 ----- Router.php 路由解析类文件 <?php include 'Autoloader.php'; class Router { public static $controller = 'Home'; public static $action = 'login'; //取模块名称和方法名称 public static function getRouter() { $array = !empty($_SERVER['PATH_INFO']) ? explode('/', strtolower($_SERVER['PATH_INFO'])) : [null, 'Home', 'login']; self::$controller = ucfirst($array[1]); self::$action = end($array); } //根据模块名称自动加载创建类的实例,并执行对应的方法 public static function get($url = '', $function = null) { self::getRouter(); switch (self::$controller) { case 'Home': $model = 'controller'; break; case 'Show': $model = 'model'; break; default: $model = $url; break; } //针对没有模块的情况 Router::get('abcd', function () {echo '显示我的 abcd 页面';}); if (!(empty($model)) && !(empty($function))) { if (gettype($function) === 'object') { $function(); return; } //字符串另外判断; } $model .= ('\\' . self::$controller); $method = self::$action; (new $model())->$method(); } } ?> 运行实例 »点击 "运行实例" 按钮查看在线实例
实例 ----- Home.php 功能派发类模块 <?php namespace controller; class Home { public function index() { echo '<p><span style="color:red;">Hello ! </span><strong>from Home -> index</strong><p>'; } public function login() { require_once 'view/login.html'; } } ?> 运行实例 »点击 "运行实例" 按钮查看在线实例
实例 ----- login.html 登录页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>登录页面</title> <script src="static/jquery-3.4.1.min.js"></script> <style type="text/css" media="screen"> form{width: 55%;position: absolute;margin: 30px auto;} div{margin: 10px;text-align: right;} </style> </head> <body> <form action="model/checkLogin.php" method="post" accept-charset="utf-8"> <div><label>用户名:<input type="text" name="username" value=""></div> <div><label>密 码:<input type="password" name="pwd" value=""></label></div> <div><label>验证码:<input type="text" name="vericode" value=""></label></div> <div><button type="button" onclick="save()">提交</button></div> </form> <script> function save(){ var username = $.trim($('input[name="username"]').val()); var pwd = $.trim($('input[name="pwd"]').val()); var vericode = $.trim($('input[name="vericode"]').val()); var result = (username=='')?(function(){alert('请输入用户名');return;})() :((pwd=='')?(function(){alert('请输入密码');return;})() :((vericode=='')?(function(){('请输入验证码');return;})():1; $.post('model/checkLogin.php',$('form').serialize(),function(data){ alert(data.msg); return (data.code==0) && (function(){window.location.href = 'index.php/home/index';})(); },'json'); } </script> </body> </html> 运行实例 »点击 "运行实例" 按钮查看在线实例
实例 ----- Show.php 类文件 <?php namespace model; class Show { public function details() { echo '<p><span style="color:red;">显示文章详情 ! </span><strong>from Show -> details</strong><p>'; } } ?> 运行实例 »点击 "运行实例" 按钮查看在线实例
【4】总结
再次练习MVC模型,诸如路径解析、相对路径和绝对路径的细节问题上还是总会出错;
项目文件没有放到网站根目录下,在路径解析和去掉index.php的url管理方面还没有完全搞清楚。