Composer没有加载我自己的psr-0文件

时间:2013-12-07 21:18:29

标签: php composer-php psr-0

我似乎无法使用psr-0自动加载机制让作曲家使用我自己的类/文件。任何人都可以说明为什么以下不起作用?

我在错误日志中收到以下输出:

  

PHP致命错误:找不到类'TestdirTest1'   第5行/home/webroot/bitlama/index.php

它确实有效如果我取消注释显式require语句(index.php:2)。

如果有人在想 - 是的,我已经以'php ../composer.phar install'的形式运行composer install。

这是我的目录结构:

├── composer.json
├── index.php
├── testspacedir
│   └── Testdir
│       └── test1.php
└── vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_real.php
        └── ClassLoader.php

composer.json:

{
    "autoload": {
        "psr-0": { "Testdir\\": "testspacedir/"}
    }
}

test1.php:

<?php

namespace Testdir;

class Test1 {

    public function __construct()
    {
        echo "Woohoo Test1";
    }

}

的index.php:

<?php
require 'vendor/autoload.php';
//require 'testspacedir/Testdir/test1.php';

$test1 = new Testdir\Test1();

供应商/ autoload.php:

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer' . '/autoload_real.php';

return ComposerAutoloaderInit7b4760e0f7ca9d6454dd2f098c374ba4::getLoader();

2 个答案:

答案 0 :(得分:3)

我的类文件被命名为test1.php,而不是Test1.php所需的PSR-0命名约定。

答案 1 :(得分:0)

你说这是有效的,因为你删除了require 'testspacedir/Testdir/test1.php';,这是正确的。

由于您定义了命名空间 - &gt; autoload composer.jsonvendor/autoload.php的文件夹结构,vendor/autoload.php为您处理这些文件夹的加载。

查看{{1}}文件,你会亲眼看到。

总而言之,composer会为您处理文件的自动加载,因此您无需执行这些包含。以下是http://getcomposer.org/doc/01-basic-usage.md#autoloading

的摘录
  

注意:Composer提供自己的自动加载器。如果你不想使用   那个,你可以包括   vendor / composer / autoload_namespaces.php,返回一个关联   数组映射名称空间到目录。