7

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

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

PHP 致命错误:在第 5 行的 /home/webroot/bitlama/index.php 中找不到类“TestdirTest1”

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

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

这是我的目录结构:

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

作曲家.json:

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

测试1.php:

<?php

namespace Testdir;

class Test1 {

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

}

索引.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();
4

2 回答 2

3

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

于 2013-12-08T10:52:31.103 回答
0

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

由于您在 in 中定义了命名空间 -> 文件夹结构,因此autoloadcomposer.jsonvendor/autoload.php您处理这些文件夹的加载。

查看该文件内部,vendor/autoload.php您将亲眼看到。

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

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

于 2013-12-07T21:23:26.767 回答