在Netbeans中集成Composer管理PHP项目依赖

相信很多PHP开发人员都碰到开发过程中需要共用多个php类库的问题,传统的做法是把这些类库放到项目中的独立文件夹,创建新项目就复制一份共用类库到此文件夹以做到代码重用,但这么做容易造成多个项目的共用类库版本不同步.而且每次复制也很麻烦,在团队多人开发或公司多团队配合时维护类库工作往往很繁琐,在java中这个问题是通过maven解决.maven中的依赖仓库设置可以让当前项目自动依赖其他项目类库代码.并且同步更新公用类库. php中现在有composer同样可以做到这点.

composer可以在php项目中实现类似Maven功能.composer并不是一个完整的PHP项目管理工具,它没有自动化任务功能,但其解决了代码依赖和自动加载.本文分几个部分讲解如何在NetBeans中集成Composer并且管理PHP代码依赖.其也适用命令行Composer. Composer的官网地址是 https://getcomposer.org/

  1. 在NetBeans中集成Composer
  2. 构建Composer依赖管理项目
  3. 设置自动加载
  4. 导入依赖库
  5. 导入私有依赖库
  6. 构建可以被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步骤:

  1. 确保PHP安装目录已经被加载到操作系统PATH环境变量中.
  2. https://getcomposer.org/composer.phar下载Composer.phar文件,将其放到PHP安装目录(就是php.exe所在目录).
  3. 可选(命令行调用): 在PHP安装目录创建 composer.bat 文件,内容为
    @php "%~dp0composer.phar" %*

    注意:在linux中你需要用bash命令作为替代

  4. 在NetBeans的tools – options – php – general 界面中设置PHP解释器.类似以下效果:php interpreter
  5. 在NetBeans的Tools – options – php – composer 界面中设置composer路径,类似以下效果:
    netbeans集成composer注意:其中的联系信息和供应商改为你自己的信息.
  6. 在composer使用过程中可能会提示需要svn,git,curl,openssl等支持,这个可以在具体使用时根据提示安装对应软件或php库

二. 构建Composer依赖管理项目

这里只介绍使用netbeans创建composer依赖管理php项目的方法. 完全手工命令行创建过程也差不多,具体需要的命令可以查看netbeans执行时的output窗口.

<

ul>

  • 1. 使用netbeans创建php项目.
    netbeanscreatephpproject
    netbeanscreatephpproject1
  • 2. 在项目中应用composer
    composer-init
    初始化composer.其会出现一个composer.json文件,此文件就是composer的配置文件(就如同maven的pom.xml,只是功能没有那么强大)
    composer-json
    这里有必要解释composer.json的各项内容:

    1. name: 这个是当前项目名称, 其格式为 “厂商名/项目名”
    2. description: 项目描述
    3. authors: 作者信息, 具体字段可以参考 authors
    4. require: 这个就是依赖库设置,等同于maven的仓库依赖设置
  • 3. 将项目设置为web站点项目(这里只是用其做示例,实际使用中根据自己的情况可以选择)

    • a. 在项目根目录建立public文件夹,此文件夹作为web根目录,避免暴露compoer或项目其他敏感文件.
    • b. 在public目录创建index.php文件(我们在这里将其作为网站首页示范文件)
    • c. 在composer.json中增加”type” : “project” 配置,增加 “license” : “proprietary” 配置.
      在这里我们把其配置为项目而不是库,这样在依赖加载此项目时才可以加载所有项目文件.证书设置为私有(想来web网站大部分代码都不是开源的吧!).
    • 现在看起来是这个样子:
      composer-porject

  • 4. 在项目中安装composer代码
    composer-install
    操作后根目录会出现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#requirehttps://getcomposer.org/doc/05-repositories.md#vcs
    我们这里只介绍常用的简单方法.

    1. 导入公共依赖库

    假设项目依赖smarty,步骤如下:

    1. composer-add-dependencyl
    2. composer-smarty
    3. composer-update
    4. 现在你可以在index.php中自由引用smarty类,就像是你自己包含了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

    Your email address will not be published. Required fields are marked *

    Time limit is exhausted. Please reload the CAPTCHA.

    Proudly powered by WordPress   Premium Style Theme by www.gopiplus.com