Symfony psr-0和composer是如何工作的?

Symfony psr-0和composer是如何工作的?,symfony,composer-php,autoload,psr-0,Symfony,Composer Php,Autoload,Psr 0,我将用一个例子来问这个问题。 假设我有一个这样的项目目录 project vendor samplevendor src composer.json 首先,我想知道我是否已将composer.json文件正确地放置在项目目录中,以便在供应商目录中安装库?其次,假设我有以下行composer.json "autoload":{ "psr-0": { "samplevendor\\package": "lib/"

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

project

  vendor

      samplevendor

  src

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

 "autoload":{
      "psr-0": {
              "samplevendor\\package": "lib/"
                }
            }
那么,composer将在何处配置自动加载以查找与项目根有关的类samplevendor\package\sampleclass? 在看到symfony2 composer.locked文件中的以下行后,我会问这个问题:

 "autoload": {
            "psr-0": {
                "Doctrine\\Common\\Annotations\\": "lib/"
            }
        }
更新:我在autoload_namespaces.php中找到了相应的名称空间映射,它似乎与psr-0不一致:


“doctor\Common\Annotations\”=>array($vendorDir./doctor/Annotations/lib')

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

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

PSR-0自动加载意味着要在目录中搜索给定的名称空间或类名前缀(请记住那些下划线“\u Classname\u namespace\u Emulation”),即名为
\namespace\class
的类,配置为
“PSR-0”:{“namespace\\”:“src”}
将位于
src/namespace/class.php
(如果文件不存在,可能另一个组件能够加载该类,因此自动加载不会立即失败-Composer将注册该失败,并查看稍后的自动加载定义是否可以加载它)

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