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管理方面还没有完全搞清楚。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号