如何正确地自动加载我的作曲家包?

时间:2017-10-20 22:20:52

标签: php composer-php

我创建了一个包,将业务逻辑分离为更容易分发的模块。 composer文件如下所示:

{
    "name": "aggiq/johnny-cash",
    "description": "A collection of controllers, models, migrations, and tests for a phonebanking backend.",
    "license": "MIT",
    "authors": [ ... ],
    "require": {
        "illuminate/database": ">=5.5"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4"
    },
    "autoload": {
        "psr-4": {
            "Johnny\\Phonebanking\\": "src/"
        }
    }
}

我们的源文件确实在src /:

的src /控制器/ PhonebankController.php    SRC /型号/ Phonebank.php    ...

我保存并将其推送到我们的gitlab repo,然后将其作为依赖项包含在测试项目中:

{
    ...,
    "repositories": [{
        "type": "package",
        "package": {
            "name": "aggiq/johnny-cash",
            "version": "0.1",
            "type": "package",
            "source": {
                "url": "gitlab url",
                "type": "git",
                "reference": "dev"
            }
        }
    }],
    "require": {
        "aggiq/johnny-cash": "*",
    },
    ...
}

当我进行作曲家更新时,它成功抓取项目并将其下载到供应商文件夹中:

vendor/aggiq/johnny-cash/Controllers/PhonebankController.php
...

然而,当我查看测试项目的autoload_psr4.php时,它不在那里。我错过了一步吗?

编辑:更新目录以使用大写字母来匹配命名空间,这里是生成的PSR4 php文件:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
);

2 个答案:

答案 0 :(得分:0)

您已正确地在包composer.json注册了自动加载:

"autoload": {
   "psr-4": {
       "Johnny\\Phonebanking\\": "src/"
   }
}

这意味着,Johnny\Phonebanking命名空间中的任何类都将位于src目录中。 E.g:

  • Johnny\Phonebanking\SomeClass =&gt; src/SomeClass.php
  • Johnny\Phonebanking\SomeNamespace\AnotherClass =&gt; src/SomeNamespace\AnotherClass.php

如您所见,必须尊重 CapitalLetters


说,你应该纠正你的目录的第一个字母,来自:

src/controllers/PhonebankController.php
src/models/Phonebank.php

src/Controllers/PhonebankController.php
src/Models/Phonebank.php

答案 1 :(得分:0)

我已经解决了。我们需要做两件事。

  1. 由于我们从git服务器加载,因此父级pacakge中指定的存储库类型应为vcs而不是package

    “repositories”:[{     “type”:“vcs”,     “url”:“git@xxx.git” }]

  2. 子包中的包类型应为library

    “type”:“library”

  3. 完成这两项更改后,composer update不仅安装了子包,还安装了它的依赖项,证明它已被作曲家识别。