原文是在我本身博客中,小伙伴也能够点阅读原文进行跳转查看,还有好听的背景音乐噢~nginx
在现代化的PHP开发当中,离开不了各类各样的组件,那么如何快速在项目中安装和找到这些组件呢?composer正是为这一目的而出现,若是你还不知道composer,那么你就out了。那么什么是composer,它的做用是什么?如何使用?本文将一一揭晓。git
组件
在说composer以前,咱们先来了解一下什么组件。由于组件和composer之间密切相关,要想知道composer是如何工做的,咱们要先清楚什么是组件。github
什么是组件
组件是打包的代码,用于咱们在实际项目中解决某个问题。好比你要输出一段漂亮的数据,摆脱var_dump
和print_r
函数,那么咱们就可使用组件var-dumper组件;咱们要写日志,就可使用monolog来实现。这些组件,已经有PHP开发者开发出来,咱们在项目中当有这样的场景的时候,直接拿来用就能够。typescript
为何要使用组件
一句话来归纳:别人已经造好的轮子,咱们为何不拿来用呢?咱们彻底不用重复实现已经实现了的功能,应该要把更多时间用在项目的长远目标上。json
组件的特色
咱们在使用PHP组件的时候,要先判断这个组件是不是咱们须要的,是否有一些功能还不严谨,就像在菜市场买菜,好坏都有。那么好的组件,基本上都具备这些特征:segmentfault
做用单一
组件的做用单一,能很好的解决一个问题。就像咱们平时在项目中写方法同样,一个方法只作一件事情。api
小型
PHP组件代码很少,由于它只为了解决某个问题而生产。数组
合做
PHP组件之间能够进行良好的合做。PHP的组件之间能够进行合做,以便解决更复杂的问题。并且组件都会放在专属的命名空间中,当咱们引入的时候,也不会与其余组件形成冲突。markdown
测试良好
PHP组件由于体型很小,因此测试起来也很方便。
文档完善
PHP组件的文档应该很完善,可让开发者们快速了解这个组件的安装、使用。
获取组件
咱们在简单了解了组件以后,应该会知道组件的好处了。那么咱们如何快速找到组件呢?依赖百度和google搜索类库吗?不不,咱们已经有了一个专门放置组件的网站Packagist,这个网站就像一个巨大的组件仓库,咱们能够在里面搜索任何咱们想要的组件,http、dump、route都有,并且这里的组件都是通过开发者们严格测试过的。若是在搜索的时候不知道哪一个组件好的话,就去选择那些使用量高、访问较多的吧,由于通常这些基本上都会没有什么大问题。固然不排除还有一些使用量不高可是仍然很优异的组件,这就须要咱们去挖掘了。
Composer
在了解了组件以后,咱们来讲正题———Composer。若是说Packagist是组件库,那么composer就是PHP组件管理工具了。composer是PHP组件的依赖管理器,它在命令行中使用。一般在你须要使用什么组件的时候,你只须要告诉composer,composer就会自动帮你安装在你的项目中,只须要一个命令,就是这么简单、强势。
安装
国内小伙伴在安装composer的时候,可能会遇到不少问题。我在当初安装composer的时候,也走了很多弯路,如今这里推荐一个快速安装composer的方法,打开命令行,执行如下命令:
在使用这些命令以前,首先确认已经安装了php,而且把php设置在了全局变量中,打开命令行输入php -v
可以看到php版本信息
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
以上三条,请依次输入,做用分别是
- 下载安装脚本 - composer-setup.php - 到当前目录。
- 执行安装过程。
- 删除安装脚本。
具体安装过程,请查看composer中国镜像网站的具体描述。
如何全局安装请看:
设置完以后,在命令行输入composer 能够看到composer版本信息。
使用
上述中介绍了如何安装composer,本章就来讲下composer如何使用。咱们先模拟下载一个PHP组件,首先咱们在Packagist网站搜索dump,咱们能够看到一个列表
这个列表里面展现的是查询出来的全部dump组件包了,咱们看到第一个symfony/var-dumper
,composer和组件之间达成了协定,组件名字的第一个信息,以上述为例symfony
表示厂商名,var-dumper
表示包名。咱们在命令行安装组件的时候,要采用这种形式:
// vendor:厂商名 package:包名
composer require vendor/package
因此咱们安装symfony/var-dumper的时候,命令行输入:
composer require symfony/var-dumper
composer会自动替咱们找到var-dumper的稳定版给咱们安装。咱们能够看到安装成功提示:
咱们打开目录能够看到,在目录下生成了三个文件
vendor目录是咱们的组件目录,composer.json执行命令的结果文件,composer.lock列出了全部的php组件,以及具体版本号。
如今咱们来使用一下这个dump组件,在根目录中新建一个php文件:
<?php
require "vendor/autoload.php";
dump(['1','2','3']);
dump(123);
首先引入自动加载器,而后使用dump方法来输出变量,dump方法正是咱们dump组件包里的一个输出变量的函数,下图是运行文件后看到的结果,输出了不同的打印样式:
发布
上面composer的安装和使用已经介绍完毕,接下来,咱们试试看发布一个简单PHP组件。其实很简单,就像本身天天写功能,把一些公用的方法封装起来同样;
厂商和包名
在上文的使用中提到过,在咱们开发PHP组件以前,咱们能够先定义一下本身即将发布的PHP组件的厂商和包名,好比我要开发一个遍历目录下全部文件的组件,那么我能够将个人组件名定义为mingzhongshui/searchfile
,mingzhonghsui即是个人厂商名,searchfile是包名,这个组件名将是全局惟一的名称,以防和其余组件冲突。另外,咱们在选择厂商名以前,能够先在packages中搜索一下,看看有没有同样的。
命名空间
每一个组件都应有本身的命名空间,这个命名空间并不须要与组件的厂商和包名一致。厂商名和包名只是为了让composer识别组件,而命名空间则是须要在PHP代码中使用组件。
组件的目录结构
- src/ 组件的源码
- tests/ 组件的测试代码
- composer.json composer配置文件,用于描述组件。同时还会告诉composer加载器,把符合PSR-4标准的规范的命名空间对应到scr/目录
- README.md 这个markdown文件里能够写组件的开发者以及组件用途、用法等
- LICENSE 组件的软件许可证
- CHANGELOG.md 版本改动记录
conposer.json
composer.json文件是PHP组件中必不可少的文件,这个文件里面的内容必须是纯JSON格式,由于composer会根据这个文件中的内容去加载、安装PHP组件,我在这里简单贴一下composer.json的示例内容,这个composer.json文件就是咱们刚刚下载dump组件中的:
{
"name": "symfony/var-dumper",
"type": "library",
"description": "Symfony mechanism for exploring and dumping PHP variables",
"keywords": ["dump", "debug"],
"homepage": "https://symfony.com",
"license": "MIT",
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"require": {
"php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"ext-iconv": "*",
"twig/twig": "~1.34|~2.4"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-symfony_debug": ""
},
"autoload": {
"files": [ "Resources/functions/dump.php" ],
"psr-4": { "Symfony\\Component\\VarDumper\\": "" },
"exclude-from-classmap": [
"/Tests/"
]
},
"minimum-stability": "dev",
"extra": {
"branch-alias": {
"dev-master": "3.3-dev"
}
}
}
里面根据字面意思应该能理解一部分,我在这里详细解释一番:
- name 厂商名和包名
- description 这个组件的一些简短描述。这个值也会在packages中显示
- keywords 关键字。用于在packages找到这个组件
- homepage 组件网站的url
- license 软件许可证。咱们能够在https://choosealicense.com/中...
- authors 表示这个组件的开发人员信息,是一个数组。每一个做者信息至少有姓名和网站url
- require 这个组件所需的其余PHP组件
- require-dev 和require类似,表示开发或者测试时须要用到的PHP组件
- suggest 和require类似,表示建议安装的PHP组件,composer默认不会自动安装这里的组件
- autoload 表示告诉composer加载器 如何加载这个组件
实现组件
以上就是composer.json配置里面经常使用的参数介绍,接下来,咱们就开发完成一个组件。我为了演示,写好了一个组件,在本章一开始就提到的searchfile,内容很简单:
<?php namespace Mingzhongshui\File; /** * Query directory file */ class SearchFile { /** * List Folder Contents * @param path $folderName Folder name */ public function searchAllFile ( $folderName ) { $result = array(); $handle = opendir($folderName); if ( $handle ) { while ( ( $file = readdir ( $handle ) ) !== false ) { if ( $file != '.' && $file != '..') { $sonPath = $folderName . DIRECTORY_SEPARATOR . $file; if ( is_dir ( $sonPath ) ){ $result['dir'][$sonPath] = $this->searchAllFile ( $sonPath ); } else { $result['file'][] = $sonPath; } } } closedir($handle); } return $result; } }
一个简单的查询目录全部文件的组件,我已经把它放在了github仓库中————地址是searchFile。
发布组件
咱们能够经过github仓库的形式提交到packages,首先咱们得有一个packagist的帐号,能够经过github登录packagist,登录以后,在页面右上角会有一个submit提交按钮,输入组件所在的github仓库地址
而后点击check,以后点击submit,packagist会自动建立组件页面
咱们能够看到,packagist自动从组件的composer.json中获取到了组件的名称、描述、关键字等信息。至此,咱们的组件就发布成功了。
使用组件
在命令行输入
composer require mingzhongshui/searchfile
他会自动帮你安装searchfile组件,若是出现报错可使用开发版本:
composer require mingzhongshui/searchfile:dev-master
使用这个的缘由是,有时候composer用的是国内的镜像,他尚未同步到源镜像中。
设置钩子
当咱们把PHP组件发布到packagist以后,若是咱们要更新咱们已经发布的组件时候该如何作呢?这时候有一个懒办法,设置github钩子使它自动同步更新packagist的组件。
访问https://packagist.org/about#how-to-update-packages
,这个地址是设置钩子的说明,咱们找到设置钩子的url https://packagist.org/api/bitbucket?username=mingzhongshui&apiToken=API_TOKEN
,这里的mingzhongshui是我packagist帐户名,根据本身的真实状况替换便可;API_TOKEN指的是本身packagist帐户中的API TOKEN,在https://packagist.org/profile/
页面中。
打开本身的github PHP组件主页,在setting中找到Webhooks,添加钩子,保存
便可。
总结
以上就是关于composer安装、使用以及发布的介绍。那么咱们有一个问题,咱们在实际中如何快速找到优秀的PHP组件呢,外国有位猿友ziadoz已经整理好了一些优秀的组件,而且列了一个列表,在github的连接为awesome-php,有须要什么组件的话,能够来这里看一下,做为参考。好了,以上就是关于composer的周边故事。