【问题标题】:Composer package autoloadingComposer 包自动加载
【发布时间】:2013-02-17 07:55:27
【问题描述】:

我的图书馆无法正常工作。目录结构是 lib-name/src,里面有一个主目录和一个测试目录,我如何告诉作曲家从 /lib-name/src/main 文件夹加载?

链接到我的库 github https://github.com/gerardorn/catalogo

【问题讨论】:

标签: php composer-php packagist


【解决方案1】:

您的目录结构应该与PSR-0 兼容。

即您的文件Catalogable.php 有一个命名空间gerardorn\catalogo,因此您的目录结构必须与以下内容匹配。

- src
    - main
        - gerardorn
            - catalogo

【讨论】:

    【解决方案2】:

    使用 composer 有 3 种方式map your classes for autloading

    PSR-0

    推荐的方式是PSR-0 兼容。该协议描述了库的目录结构。每个命名空间都需要是一个目录。带下划线的类也被分隔(PEAR 样式)。

    在您的情况下,类 Catalogable 具有命名空间 gerardorn\catalogo。为了与 PSR-0 兼容,目录结构为:

    - src
       - main
          - gerardorn
             - catalogo
                - Catalogable.php
    

    在您的composer.json 中,您应该输入以下内容:

    "autoload" : {
        "psr-0" : {"gerardorn" : "src/main"}
    }
    

    类图

    您也可以使用classmap。无论命名空间如何,都会在目录中搜索类。

    "autoload": {
        "classmap": ["src/main"]
    }
    

    文件

    第三种方法files不适用于您的情况。


    PHPUnit

    请注意,测试您的库需要 PHPUnit,而不是 运行您的库。因此,您不应该将它作为必需的库。

    编写单元测试很好。您应该注册Travis CI。每次你推送到 GitHub 时,它都会运行你的 PHPUnit 测试,并在出现问题时(通过电子邮件)警告你。

    【讨论】:

    • 感谢您提供如此完整的答案,我对 PSR-0 不了解,我仍在学习使用 composer。
    猜你喜欢
    • 2013-06-16
    • 2016-06-10
    • 2017-01-26
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2020-06-17
    • 2016-04-17
    相关资源
    最近更新 更多