批改状态:合格
老师批语:看来你是下了一定功夫来理解这套流程了, 不错, 不错
一、关于composer组件的命令:
1、搜索:composer search 包名
2、安装包:composer install\require 包名(install从composer.json中加载安装)
3、删除包:composer remove 包名
4、打包组件:composer archive
5、自动加载映射:composer dump-autoload或者composer dump
6、安装项目:composer create-project 包名 安装目录
7、更新:修改composer.json、交互composer init 、composer require;
二、借助composer组件写一个框架思路(借助composer.json,自动加载器):
1、框架:MVC框架部分{app和core}和组件部分{vendor和composer.json、composer.lock}以及入口文件;
2、创建自动加载器:创建一个composer.json文件,在当前项目下(终端)运行composer install命令,生成vender文件和autoload.php文件。
3、将自建类和公共函数自动加载,写入composer.json中:例如:
{"require":{},"autoload":{"psr-4": {//写入需要自动加载类的文件目录映射"core\\":"core","web\\":"web"},//写入需要自动加载的文件(项目的)相对目录:公共函数类"files":["core\\functions.php"]}}
4、将自建类和公共函数自动加载,写入composer.json中后,运行composer dump生成新的类库映射;
5、安装操作数据库组件composer require nette/database;
6、框架运行思路:
1、目录构架:
2、composer.json代码
{//自动加载映射"autoload": {"psr-4": {"controllers\\": "app/controllers","models\\": "app/models","views\\": "app/views","core\\": "core"}},//已加载组件版本信息"require": {"catfan/medoo": "^1.7","league/plates": "^3.3"}}
3、控制类代码:
<?phpnamespace controllers;use models\Model;use views\View;// 服务容器// facades//控制类class Controller{//测试访问类public function index(){return "欢迎访问MVC(composer)框架";}//访问员工列表的方法public function home(){$db=new Model();$staffs=$db->select('staffs',['id','name','age','sex','position','mobile'],['age[>=]'=>50,'LIMIT'=>[10,10]]);// printf('<pre>%s</pre>',print_r($staffs,true));$v=new View('public');return $v->render('home',['staffs'=>$staffs]);}//如果类中没有此方法,直接调用index()方法public function __call($name, $arguments){return $this->index();}}
4、核心类路由类
<?phpnamespace core;use controllers\Controller;//路由解析器class Route{public function get(){//判断有误“PATH_INFO”if(@$_SERVER['PATH_INFO']){$cm=array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));$c=ucfirst(array_shift($cm));// echo '$class:输出的:'.$class;$method=array_shift($cm);//提示:如果用变量来表示类名,实列化前需要加上类的命名空间$b = 'controllers\\'. $c;$obj = new $b;return $obj->$method();//如果没有PATH_INFO则直接输出默认类和方法}else{return (new Controller())->index();}}}
5、入口文件
<?phpuse core\Route;require 'vendor/autoload.php';echo (new Route())->get();
6、代码运行结果

1、关于composer组件是对PHP代码模块化的一种形式,代码封装,再利用;
2、MVC框架整体构架没有变化,只是在MVC的架构中添加了composer组件管理器,来方便添加组件功能;
3、对于框架可以整体理解为三部分:MVC框架部分{app和core}和组件部分{vendor和composer.json、composer.lock}以及入口文件;
4、MVC框架重点理解:命名空间和自动加载之间的关系;往往出问题都在自动加载这块,自动加载出问题:往往跟命名空间、类名称和文件路径不一致导致;注意:\和/ 的使用场景
5、MVC框架大体可分为model、view、controller,这三块主要都是类、对象的应用和扩展
6、在使用自动加载时:用变量来表示类名,来实例化类需要加上类的命名空间;
7、类对象中函数return不等同于输出,所有在调用函数时,需要输出函数才能显示在客户端页面中
8、MVC框架中的类,自动加载要依赖composer组件中的自动加载器,所以需要把类(空间名信息)写入composer.json中的autoload字段中psr-4的里面;并执行composer dump生成映射;
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号