原文在我自己的博客里,小伙伴们也可以点击阅读原文跳转查看,还有好听的背景音乐~在现代PHP开发中,你可以'tleave有各种各样的组件,那么如何在项目中快速安装和找到这些组件呢?Composer就是为了这个目的而来的,如果你还不知道Composer,那你就out了。那么什么是作曲家,它有什么作用?如何使用?本文将一一揭晓。组件在讲composer之前,我们先了解什么是组件。因为components和composer是紧密相关的,所以我们要想知道composer是如何工作的,首先要了解什么是component。什么是组件组件就是我们在实际项目中用来解决某个问题的封装代码。比如你想输出一段漂亮的数据,去掉var_dump和print_r函数,那么我们可以使用组件var-dumper组件;如果我们想写日志,我们可以使用monolog来实现。这些组件由PHP开发人员开发。当我们在项目中有这样的场景时,我们可以直接使用它们。为什么要用组件一句话总结:我们为什么不用别人造的轮子?我们不需要重复已经实现的功能,我们应该把更多的时间花在项目的长期目标上。组件特点我们在使用PHP组件的时候,首先要判断这个组件是不是我们需要的,是不是有些功能不够严谨,就像去菜市场买菜一样,有好有坏。这么好的组件基本上有这些特点:功能单一的组件,功能单一,能很好的解决一个问题。就像我们平时在项目中写方法一样,一个方法只做一件事。一个小的PHP组件没有太多代码,因为它只是为了解决一个问题而产生的。协作PHP组件可以很好地协同工作。PHP的组件可以合作解决更复杂的问题。而且,组件会被放置在一个专用的命名空间中,当我们导入它们时,不会与其他组件产生冲突。经过良好测试的PHP组件由于体积小而易于测试。完善的文档PHP组件的文档应该是完整的,可以让开发者快速了解这个组件的安装和使用。获取组件我们对组件有了简单的了解之后,就应该知道组件的好处了。那么我们如何快速找到组件呢?你靠百度和谷歌搜索库吗?不是的,我们已经有一个叫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');"phpcomposer-setup.phpphp-r"unlink('composer-setup.php');"请将以上三项一一填写。作用是将安装脚本——composer-setup.php——下载到当前目录。完成安装过程。删除安装脚本。具体安装过程请参考composer中国镜像网站上的具体说明。查看如何全局安装:设置完成后,在命令行输入composer,可以看到composer的版本信息。使用上面介绍了如何安装composer,本章将讲述如何使用composer。让我们先模拟下载一个PHP组件。首先,我们在Packagist网站上搜索dump。我们可以看到一个列表。该列表显示了查询到的所有转储组件包。我们看到第一个symfony/var-dumper,composer和组件达成了协议,组件名的第一个信息,以上面为例,symfony代表厂商名,var-dumper代表包名。我们在命令行安装组件的时候,需要使用这样的形式://vendor:厂商名package:包名composerrequirevendor/package所以我们在安装symfony/var-dumper的时候,命令行输入:composerrequiresymfony/var-dumpercomposer会自动找到稳定版的var-dumper供我们安装。我们可以看到安装成功的提示:我们打开目录可以看到目录下生成了三个文件。vendor目录是我们的组件目录,composer.json是执行命令的结果文件,composer.lock列出了所有的php组件。,以及具体的版本号。现在让我们使用这个转储组件在根目录中创建一个新的php文件:=7.0.8","symfony/polyfill-mbstring":"~1.0"},"require-dev":{"ext-iconv":"*","twig/twig":"~1.34|~2.4"},"冲突":{"phpunit/phpunit":"<4.8.35|<5.4.3,>=5.0"},"suggest":{"ext-iconv":"将非UTF-8字符串转换为UTF-8(或symfony/polyfill-iconv,以防无法使用ext-iconv)。","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厂商名和包名说明该组件的一些简短描述值也会显示packages中的keywords关键字,用于在packages中查找本组件主页组件网站的urllicense软件许可,我们可以在https://choosealicense中注明本组件的开发者信息.com/...authors,是一个数组,每个作者信息至少有姓名和网站urlrequire这个组件requires其他PHP组件require-dev和require类似,表示需要用于开发或测试的PHP组件。对于PHP组件,composer默认不会自动安装组件在这里。autoload的意思是告诉composerloader如何加载这个组件来实现组件。以上就是composer.json配置中常用参数的介绍。接下来,我们将开发一个组件。为了演示,我写了一个组件,本章开头提到的searchfile,内容很简单:searchAllFile($sonPath);}else{$result['file'][]=$sonPath;}}}closedir($handle);}返回$结果;}}一个简单的查询目录下所有文件的组件,我已经放在了github仓库---地址是searchFile。发布组件,我们可以通过github仓库的形式提交到package中。首先,我们必须有一个packagist帐户。我们可以通过github登录packagist。登录后,页面右上角会有一个提交按钮。输入组件所在的github仓库地址然后点击check,然后点击submit,packagist会自动创建一个组件页面。我们可以看到packagist自动从组件的composer.json中获取了组件名称、描述、关键字等信息。至此,我们的组件已经发布成功。使用组件在命令行输入composerrequiremingzhongshui/searchfile,它会自动帮你安装searchfile组件。如果报错,可以使用开发版:composerrequiremingzhongshui/searchfile:dev-master之所以使用这个是因为有时候composer使用国内镜像的image还没有同步到源镜像。设置钩子我们将PHP组件发布到packagist之后,如果要更新已经发布的组件怎么办呢?这时候有个偷懒的方法,就是设置githubhook自动同步更新packagist组件。访问https://packagist.org/about#how-to-update-packages,这个地址是设置hook的说明,我们找到设置hook的urlhttps://packagist.org/api/bitbucket?username=mingzhongshui&apiToken=API_TOKEN,这里的mingzhongshui是我的packagist账号名,你可以根据自己的实际情况替换;API_TOKEN是指您的packagist帐户中的APITOKEN,在https://packagist.org/profile/页面中。打开自己的githubPHP组件主页,在setting中找到Webhooks,添加hook,保存。综上所述,以上就是composer的安装、使用和发布的介绍。那么我们就有一个问题,我们如何在实践中快速找到优秀的PHP组件呢?国外的猿友ziadoz整理了一些优秀的组件,列了一个清单。github上的链接是awesome-php。如果你需要什么组件,可以来这里看看,作为参考。好了,以上就是作曲家的周边故事。
