使用Composer自动加载器进行自定义代码管理?

Let*_*ion 21 php composer-php

我已经开始了一个新项目,我使用Composer来处理一些依赖项,以及它们的自动加载.

我只将composer.json文件保存在VCS中,而不是整个供应商目录中,所以我不想开始在那里添加我的代码.

我应该如何处理我自己的项目特定代码,以便它自动加载?

Jak*_*las 47

这其实很简单.从存储库中排除供应商目录是正确的方法.您的代码应存储在一个单独的位置(如src).

使用autoload属性使该composer识别您的命名空间:

{
    "autoload": {
        "psr-4": {
            "Acme\\": "src/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

假设您的类名遵循psr-4标准,它应该可以工作.下面是一些类名称及其在文件系统上的位置示例:

  • Acme\Command\HelloCommand - > src/Command/HelloCommand.php
  • Acme\Form\Type\EmployeeType - > src/Form/Type/EmployeeType.php

请记住为每个类定义命名空间.这是Acme\Command\HelloCommand的一个例子:

<?php

namespace Acme\Command;

class HelloCommand
{
}
Run Code Online (Sandbox Code Playgroud)

不要忘记在PHP控制器中包含自动加载器:

<?php

require 'vendor/autoload.php';
Run Code Online (Sandbox Code Playgroud)

阅读PHP Framework Interoperability Group上有关PSR-4标准的更多信息.

请注意,如果进行编辑composer.json,则需要运行install,update或dump-autoload来刷新自动加载器类路径.

  • @Letharion更新了我的答案,希望这会有所帮助. (3认同)
  • 您是否有机会使用带有一两个虚拟类的简单代码示例来更新答案?尽管阅读了您链接到的文档,并将我的目录/命名空间与vendor /中使用的文档进行比较,但我无法加载我的类. (2认同)