composer
Composer的作用不仅仅是安装一个框架,它能实现类的自动加载、项目依赖管理,以及创建自己的包,虽然php提供了自动加载机制,但是自动加载功能需要手动设置才能实现,操作相对复杂,so可以使用composer来解放生产力。
在mytp.test网站根目录下,创建composer.json文件
composer.json
{
"autoload":{
"psr-4":{"app\\": "application/"}
}
}
上述代码中,autoload表示使用自动加载,psr-4表示自动加载的类文件要遵循psr-4规范的要求,"app\"表示app命名空间,“application/”:表示application目录
执行composer install 命令即会在网站根目录下生成vender目录。
composer提供了vendor/autoload.php文件,在项目中直接引入它就可以实现自动加载。如果修改了composer.json文件,即可使用composer update命令更新。
mytp.test网站下文件修改
- public\index.php
<?php
require '../vendor/autoload.php'; //引入composer生成自动加载类的机制
$pathinfo = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : $_SERVER['REDIRECT_URL'];
$route = [
'student' => 'student/student/index',
'index' => 'index/index/index',
]
$pathinfo = trim($pathinfo,'/');
if(isset($route[$pathinfo]))
{
$pathinfo = $route[$pathinfo];
}
$arr = explode('/',$pathinfo);
if(!isset($arr[2]))
{
exit("请求信息有误");
}
list($module,$controller,$action) = $arr;
define(MODULE_PATH,'../application/'.$module.'/');
$controller_name = '\\app\\'.$module.'\\controller\\'.ucwords($controller);
$controller_path = MODULE_PATH.'controller/'.$controller_name.'.php';
$obj = new $controller_name();
$obj->student();
StudentController.php改为Student.php
<?php
namespace app\student\controller;
use app\student\model\Student as StudentModel;
class Student
{
public function index()
{ //调用模型和视图
//require MODULE_PATH.'model/StudentModel.php'; //修改模型路径
$model = new StudentModel();
$data = $model->getAll();
require MODULE_PATH.'view/student.html'; //修改视图路径
}
}
StudentModel.php改为Student.php
<?php
namespace app\student\model;
use MySQLi;
class Student
{
protected $link;
public function __construct()
{
$this->link = new Mysqli('localhost','root','root','mytp');
$this->link->set_charset('utf8');
}
public function getAll()
{
$sql = 'Select * from `student`';
$res = $this->link->query($sql);
return $res->fetch_all(MYSQLI_ASSOC);
}
}
结果如下图所示: