多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> TP5终于官方支持composer依赖管理工具,学习过Laravel、Yii、Symfony等国际巨星级框架的码友们应该感受过composer带来的快感:只需一个composer require命令,你需要的菜和各种佐料就准备好了! > 根据我个人的理解,TP5的思想就是专注与生产优质的好大米,你得自己整合各种配料,做出你想要的炒饭或者寿司。 > 我在官方群潜伏多时,看到很多人问官方什么时候支持XXX啊?之类的问题,我只想说,到了TP5的时代,你必须先think,然后才能PHP。手握神器composer,为什么不think一下,怎么通过composer把外面优秀的扩展引进来? * * * * * 话不多说,现在讲解一下“怎么引进来”: [TOC] ###编写thinkphp5 composer扩展 已本人的第一道小炒,基于`gregwar/captcha`的验证码扩展为例,写一下我制作TP5扩展的过程: Github:[tp5-captcha](https://github.com/CantonBolo/tp5-captcha) 在`vendor`目录中建立文件夹`tp5` 打开命令行,切换到刚才建立的`tp5`目录,运行: ```bash git init captcha ``` 系统会建立的captcha的空仓库 在命令行中进入captcha目录,运行: ```bash composer init ``` > Package name输入:tp5/captcha > Description可以暂时留空 > Author可以暂时输入n跳过 > Minimum Stability可以跳过 > Package Type可以跳过 > License可以根据自己的要求输入合适的协议名称 > Would you like to define your dependencies (require) interactively [yes]由于我的扩展需要依赖`gregwar/captcha`,所以我输入yes > Search for a package输入gregwar/captcha,下一步是设置你需要的版本,最新的就可以,直接回车! > 后面几步暂时可以全部回车执行默认值! 上面的流程执行完后,composer已经为你生成了一个最短小形态的composer.json文件。 ```json { "name": "tp5/captcha", "require": { "gregwar/captcha": "^1.1" } } ``` 接下来就是定义composer的加载规则,也就是composer.json里的`autoload`段,推荐使用`psr-4`和`files`这两个规则。 > 那么`psr-0`和`classmap`呢? `psr-0`和`classmap`这两种规则个人建议不要再使用了,我们可以对比一下`psr-0`和`psr-4`的区别: Composer使用PSR-0风格: ``` vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassName ``` Composer使用PSR-4风格: ``` vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest ``` 通过对比可以发现使用`psr-4`的目录结构更加简明,至于`classmap`,这么杂乱无章的规则就更不要考虑了。psr标准的宗旨是:代码是写给人看的,不是写给机器看的。因此好的PHP项目都遵循psr标准。 在composer package中,类文件通过`psr-4`规则加载,其他的例如配置文件、函数文件、过程文件之类的通过`files`来进行加载。 回到正题,我给项目定的autoload如下: ```json "autoload": { "psr-4": { "tp5\\captcha\\": "src/" //通过tp5\captcha\命名空间加载src目录里的类文件 }, "files": ['file1.php', 'file2.php'] //如果有不包含类的文件,用files加载 } ``` 然后建立src/Captcha.php文件,采用100%手打代码工艺: ```php namespace tp5\captcha; use Gregwar\Captcha\CaptchaBuilder; class Captcha extends CaptchaBuilder { } ``` 我没偷懒,真的就是这么短...........................小精悍。 至此,我已经成功地引gregwar/captcha入TP5了。但是还得测试一下。 ###测试本地package 把所做的更改全部提交到本地仓库,然后修改项目根目录的composer.json文件,在repositories段中增加: ```json "tp5/captcha": { "type": "vcs", "url": "./vender/tp5/captcha/" } ``` 然后在命令行中运行: ```bash composer require tp5/captcha ``` composer会从本地仓库中检出tp5/captcha,并自动生成加载文件。 试试在项目中调用一下tp5/captcha中定义的类或者函数: ```php new \tp5\captcha\Captcha(); ``` 如果没有报`Fatal error: class not found`的话,恭喜你,这个package已经可以使用了! 如果对package做了修改,可以运行`composer dump-autoload`重新生成自加载文件,确保你的修改都能引入项目里。 ###让你的成果走出去 当你的package足够丰满,有能力应付各种客人时,不妨试试把你的package发布到packagist,让更多人受惠!请看下一章:怎么走出去。