相信很多PHP开发人员都碰到开发过程中需要共用多个php类库的问题,传统的做法是把这些类库放到项目中的独立文件夹,创建新项目就复制一份共用类库到此文件夹以做到代码重用,但这么做容易造成多个项目的共用类库版本不同步.而且每次复制也很麻烦,在团队多人开发或公司多团队配合时维护类库工作往往很繁琐,在java中这个问题是通过maven解决.maven中的依赖仓库设置可以让当前项目自动依赖其他项目类库代码.并且同步更新公用类库. php中现在有composer同样可以做到这点.
composer可以在php项目中实现类似Maven功能.composer并不是一个完整的PHP项目管理工具,它没有自动化任务功能,但其解决了代码依赖和自动加载.本文分几个部分讲解如何在NetBeans中集成Composer并且管理PHP代码依赖.其也适用命令行Composer. Composer的官网地址是 https://getcomposer.org/
- 在NetBeans中集成Composer
- 构建Composer依赖管理项目
- 设置自动加载
- 导入依赖库
- 导入私有依赖库
- 构建可以被Composer导入的类库
一. 在NetBeans中集成Composer
准备工作: 我使用的是NetBeans IDE 7.4版和PHP 5.4,操作系统是Windows7 64位. 当然你使用最新的NetBeans 8.0或其他IDE也可以. 步骤都差不多. 注意在NetBeans执行Composer命令时在IDE底部输出窗口可以看到具体被执行的Composer命令,其可以作为你在命令行中使用Composer的参考. 这里就不讲解如何安装NetBeans和PHP了. 不过要注意的是NetBeans最好不要比我的版本低,而且php也要求php5.3.2以上. 这是使用Composer的最低要求.
Composer集成NetBeans步骤:
- 确保PHP安装目录已经被加载到操作系统PATH环境变量中.
- 从https://getcomposer.org/composer.phar下载Composer.phar文件,将其放到PHP安装目录(就是php.exe所在目录).
- 可选(命令行调用): 在PHP安装目录创建 composer.bat 文件,内容为
@php "%~dp0composer.phar" %*
注意:在linux中你需要用bash命令作为替代
- 在NetBeans的tools – options – php – general 界面中设置PHP解释器.类似以下效果:
- 在NetBeans的Tools – options – php – composer 界面中设置composer路径,类似以下效果:
注意:其中的联系信息和供应商改为你自己的信息. - 在composer使用过程中可能会提示需要svn,git,curl,openssl等支持,这个可以在具体使用时根据提示安装对应软件或php库
二. 构建Composer依赖管理项目
这里只介绍使用netbeans创建composer依赖管理php项目的方法. 完全手工命令行创建过程也差不多,具体需要的命令可以查看netbeans执行时的output窗口.
<
ul>
初始化composer.其会出现一个composer.json文件,此文件就是composer的配置文件(就如同maven的pom.xml,只是功能没有那么强大)
这里有必要解释composer.json的各项内容:
- name: 这个是当前项目名称, 其格式为 “厂商名/项目名”
- description: 项目描述
- authors: 作者信息, 具体字段可以参考 authors
- require: 这个就是依赖库设置,等同于maven的仓库依赖设置
操作后根目录会出现vendor文件夹,其内包含了所有的composer代码或composer下载的依赖库.
<
ul>
三. 设置自动加载
composer支持自动加载代码,可以自动加载类(psr-0,psr-4)或指定php文件. 这在项目中非常有用,再也不必每次写代码前都要include相关文件了.
在public/index.php中写入以下代码即可自动应用composer下载的依赖库或自定义设置的命名空间
request "../vendor/autolaod.php" |
要加载自定义类库空间请参考 https://getcomposer.org/doc/04-schema.md#autoload
四. 导入依赖库
这里分两种情况,一种是导入公共库,即网络上公开的php库,另一种是导入公司内部私有库. 详细可以参考
https://getcomposer.org/doc/04-schema.md#require和https://getcomposer.org/doc/05-repositories.md#vcs
我们这里只介绍常用的简单方法.
1. 导入公共依赖库
假设项目依赖smarty,步骤如下:
在这其中注意requrue有dev和非dev的区别,dev指的是开发版,此时如果你使用update(dev)则会更新带dev标志的requre类库,这个方法在做测试的时候非常有用,例如你本地测试可能需要phpunit或带调试的类库,而生产环境就不需要它.
2. 导入私有依赖库
在内部开发环境时往往有很多类库或代码需要在多个项目中重用,而这些类库又不能公开(不能上传到外网代码仓库,当然也不可以在composer公共以来库去注册.)此时,你需要的是自定义composer仓库源(就如同自定义maven源那样). 当然如果你嫌公网下载compser依赖太慢,也可以把用自定义源覆盖公网对应类库设置. 自定义总是优先的.
例如项目以来公司内部git(非git服务器请参考https://getcomposer.org/doc/05-repositories.md#vcs)服务器上的类库”zhuolin/testlib”,composer.json设置如下:
{ "name": "zhuolin/my-php-project", "description": "Description of project MyPhpProject.", "type" : "project", "license" : "proprietary", "authors": [ { "name": "Shi Zhuolin", "email": "shizhuolin@hotmail.com" } ], "repositories": [ { "type": "git", "url": "http://192.168.1.254/testlib.git", "vendor-alias": "zhuolin" } ], "require": { "smarty/smarty": "v3.1.15", "zhuolin/testlib": "dev-master" } } |
这里注意,repositories就是自定义的依赖仓库,我这里自定义公司内部服务器,但由于内部服务器没有按供应商名称给项目分目录(毕竟都是公司内部使用)。所以给其取了一个”zhuolin”的供应商别名,这样才符合require的依赖库命名规范. 其中dev-master就是testlib.git的master分支,只要不是创建git-tag 则都会存在dev类似的名称(表示开发中,随时可能变动). 设置好compoesr.json后执行composer update即可自动下载testlib代码到vendor目录中,并且根据类库的composer.json设置自动加载(请看后文“构建可以被Composer导入的类库”)。
五.构建可以被Composer导入的类库
要注意,一般情况下只有带composer.json的类库才可以被composer作为依赖管理,这里就讲解如何创建支持此规范的compoer依赖类库.
创建composer依赖类库其实和创建composer网站项目区别不大,主要区别就两个地方.
1. composer.json中的type值是library. 表示这是一个类库而不是一个全覆盖项目.
2. 必须在composer.json设置自动加载类空间,这样此库被依赖加载后,才可以自动导入其命名空间以被其他项目使用.
例如zend\file类库的composer.json如下:
"autoload": { "psr-0": { "Zend\\File\\": "" } }, |
表示zend\file前缀类都在根目录开始寻找.其autoload配置节可以让此依赖被加载后自动更新composer的autoload.php,这样在你的项目中就可以自由引用zend\file命名空间类.
Leave a Reply