使用composer编写框架比较便捷,注意做到 1+2 结构,即:
一个目录'vendor'。
两个文件:'composer.json','composer.lock'。
一、什么是“composer.json”?
composer.json 是使用‘json’格式来描述了当前项目所依赖的包、组件、类库和版本。
二、“composer.json”创建方式
1.交互式创建:’composer init’(在当前项目所在的目录下执行)。
PS D:\phpstudy_pro\WWW\php11\php> cd 0518//切换当前项目所在的目录
PS D:\phpstudy_pro\WWW\php11\php\0518> composer init//执行'composer init'命令
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.//欢迎语句
Package name (<vendor>/<name>) [administrator/0518]: php/edu //创建我的包的名称(命名规则为:“字符串/字符串”)
Description []: php chinese web //用几个关键字描述我创建的包
Author [, n to skip]: Peter Zhu <154780847@qq.com>//作者的姓名和邮箱
Minimum Stability []: //是否定义其他信息,否则直接回车
Package Type (e.g. library, project, metapackage, composer-plugin) []:library//描述我创建的包的类型,是库?是组件?还是插件?等等
License []: MIT//问我要一个协议,意思是我创建的包是免费的?还是收费的?是公有的?还是私有的?等等
Define your dependencies.//定义您的依赖项。
Would you like to define your dependencies (require) interactively [yes]? no //您想交互式地定义您的依赖项(要求)[是]吗?有yes和no两个选项。no是不安装,yes则会打开搜索让我们选择需要定义的依赖项。
Would you like to define your dev dependencies (require-dev) interactively [yes]? no //您想交互式地定义您的dev(开发者)依赖项(require-dev)[是]吗?no //同上。
{
"name": "php/edu",
"description": "php chinese web",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Peter Zhu",
"email": "154780847@qq.com"
}
],
"require": {}
} //这是一个典型的'json'格式
Do you confirm generation [yes]? yes //让我们确认所要创建的包的信息
PS D:\phpstudy_pro\WWW\php11\php\0518>//这时候,我们已经在0518这个目录下面创建了一个名字为“composer.json”的json文件。
生成的json文件的基本信息和我们终端工作台生成的预览一模一样。
2.利用”require”命令执行”composer install”自动创建
{
"name": "php/edu",
"description": "php chinese web",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Peter Zhu",
"email": "154780847@qq.com"
}
],
"require": {"components/jquery":"^3.51"//在此处指定我们想要安装的包的名称,如果我们不记名称的话,可以到packagist.org网站搜索}
}
在终端输入命令:
PS D:\phpstudy_pro\WWW\php11\php\0518> composer install
扫描json文件,先进行更新,再进行安装.
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing components/jquery (3.5.1): Downloading (100%)
Writing lock file
Generating autoload files //安装成功,这时会在0518目录下自动创建一个名字叫做"vendor"的目录,将我们所安装的包保存在"vendor"目录下。同时0518目录下生成一个叫做“composer.lock”的锁定文件,这个文件会将我们使用jquery 包的版本锁定在3.5.1版本。锁定版本的好处是,如果你把“composer.json”和“composer.lock”两个文件同时复制到别的电脑上使用时,可以保证版本的一致性。
如果我们的“composer.json”文件被更新了,那么我们接着在require文件里面输入包的名称和版本。
"require": {
"components/jquery": "^3.5",
"twbs/bootstrap": "^4.5"
}
}
PS D:\phpstudy_pro\WWW\php11\php\0518>composer update//在终端工作台输入更新命令
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing components/jquery (3.5.1): Downloading (100%)
Writing lock file
Generating autoload files
PS D:\phpstudy_pro\WWW\php11\php\0518> composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing twbs/bootstrap (v4.5.0): Downloading (100%)
Writing lock file
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!//更新文件并锁定版本信息到“composer.lock”文件中
三、composer常用命令行
如果不存在"composer.json","composer.lock"和"vendor",那么我们可以在终端工作台输入命令"composer require +包名称"并执行,这样就会在0518目录下自动创建三个文件。
在终端工作台输入命令"composer",可以查看composer各命令的功能。
在终端工作台输入命令"composer -V",可以查看composer的版本信息。
在终端工作台输入命令"composer selfupdate",可以在线升级composer。
在终端工作台输入命令"composer show",可以查看composer中安装了哪些包。
在终端工作台输入命令"composer show + 包的名称",可以查看该包的详细配置信息。
在终端工作台输入命令"composer create-project + 包的名称",可以在当前目录下创建该项目。
四、使用composer编写一个小框架
1.在当前项目根目录下创建”app”文件夹。
2.在”app”文件夹下分别创建”controllers”、”models”、”views”三个文件夹。
3.在项目根目录下创建”composer.json”文件。同时”vendor”文件夹也被自动创建出来。注意:这里在终端控制台运行”composer install”和”composer update”命令均不会在项目根目录下自动创建”composer.lock”文件。
4.在项目根目录下新建”index.php”文件。
5.将”autoload”字段加载进”index.php”文件。
{
"autoload": {
"psr-4": {//当前的命名空间和当前的类形成一一对应的映射关系
"controllers\\": "app/controllers"
}
}
}
6.在终端工作台输入命令”composer dump-autoload”,将’composer.json’中的”autoload”中的空间映射生效
7.在”index.php”文件中导入”vendor”文件夹里面的”autoload.php”文件。
8.在controllers文件夹中创建StaffsController.php文件,在models文件夹中创建StaffsModel.php文件,并分别创建类文件。
9.首先对控制器进行测试打印echo (new StaffsController)->index()
10.再对模型进行测试打印
echo (new StaffsModel)->index();
11.创建”views/staffs/list.php”文件,并通过’composer.json’文件映射加载进”index.php”文件。
12.在终端工作台通过输入”composer require catfan/medoo”命令引入第三方模型组件medoo。
13.在终端工作台通过输入”composer require league/plates”命令引入第三方视图组件plates。
14.写控制器,框架一般都需要一个核心类目,在项目根目录下创建core文件夹,并在core文件下创建公共模型”Model.php”和公共视图”View.php”文件。
15.在’composer.json’文件中对”core”文件内的公共模型和公共视图做接口映射。
16.将Medoo的数据扩展给Model,将Plates\Engine的数据扩展给View。
17.在控制器中查询数据库内容。
18.在app/views/staffs/list.php文件中使用foreach遍历数据库中的数据。
19.在浏览器中预览效果
五、总结
1.composer虽然用起来方便,可以减少程序员编写代码的时间,但是对于其中的映射、扩展、继承等各种数据之间的关系,一定要做到条理清晰,否则易出现错误。
2.学习单个命令工具并不难,难得是怎样组合安装,不仅不能出错,还要精致美观。
3.基础扎实是王道,地基打好了,上层建筑才能稳定牢固。