0

我会用一个例子来问这个问题。假设我有一个像这样的项目目录。

project

  vendor

      samplevendor

  src

  composer.json

首先,我想知道我是否已将 composer.json 文件正确放置在项目目录中,以便在供应商目录中安装库?其次,假设我在 composer.json 中有以下几行

 "autoload":{
      "psr-0": {
              "samplevendor\\package": "lib/"
                }
            }

那么作曲家将在哪里配置自动加载以查找与项目根有关的类 samplevendor\package\sampleclass?在 symfony2 composer.locked 文件中看到以下行后,我问这个问题:

 "autoload": {
            "psr-0": {
                "Doctrine\\Common\\Annotations\\": "lib/"
            }
        }

更新:我在 autoload_namespaces.php 中找到了相应的命名空间映射,它似乎与 psr-0 不符:

'Doctrine\Common\Annotations\' => 数组($vendorDir . '/doctrine/annotations/lib')

4

1 回答 1

2

您可能可以composer.json根据需要将文件放在项目中的任何位置,但对于纯 PHP(和 HTML/CSS/JS)项目,最好将文件放在最顶层目录中。这样,如果您创建库或想要其他一些不错的副作用,Composer 将能够找到它。(其中有很多不会直接影响 Composer 或您的软件的工作方式)。

composer.json通过运行创建首字母是个好主意composer init。Composer 将询问您有关供应商名称和软件名称的信息。我建议你在这里给出一个合理的答案。此外,您可以将自己添加为开发人员,立即添加一些依赖项(不一定需要),最后创建初始文件。

PSR-0自动加载意味着命名空间或类名的给定前缀(记住那些Underscore_Classname_Namespace_Emulation)将在目录中搜索,即\Namespace\Class配置为的类"psr-0": {"Namespace\\": "src"}将位于src/Namespace/Class.php(如果文件不存在,可能是另一个组件能够加载该确切的类,因此自动加载不会立即失败 - Composer 将记录该失败并查看以后的自动加载定义是否可以加载它)。

autoload_namespaces.php您在所需库的文件中看到不同定义的事实是正确的。Composer 必须从 .json 文件中的不同目录加载这些vendor,并且您自己的类将从 composer.json 文件的自动加载部分中给出的位置自动加载。

于 2014-02-18T00:04:07.357 回答