Composer autoload - 如何从不同的文件夹中获取类,特征和接口?

时间:2015-01-08 05:08:27

标签: php namespaces composer-php autoloader spl-autoloader

如何使用composer autoload从不同的文件夹中获取类,特征和接口?

其中一些我使用名称空间,例如,

控制器/ Foo.php,

namespace MyNamespace;
class Foo
{
    public $message = 'hello Foo';
}

模型/ Boo.php

namespace MyNamespace;
class Boo
{
    public $message = 'hello Boo';
}

的index.php,

// Composer.
require 'vendor/autoload.php';

use \MyNamespace\Foo;
$Foo = new Foo();
var_dump($Foo);

误差,

  

致命错误:在C:...

中找不到“MyNamespace \ Foo”类

composer.json,

{
    "autoload": {
        "psr-0": {
            "": "ext/",
            "": "controller/",
            "": "model/" 
        }
    }
}

我在许多不同的文件夹中有很多课程(它可能会扩展),所以当我在新文件夹中有新课程时,有没有办法没有重新安装作曲家自动加载?

1 个答案:

答案 0 :(得分:1)

您必须标准化命名空间和文件夹结构。如果在不同的文件夹中具有相同的命名空间,则创建一个简单的逻辑来自动加载它们就更难了。尝试在命名空间中使用其他段,如:

namespace MyNamespace\Controller;
class Foo
{
    public $message = 'hello Foo';
}

namespace MyNamespace\Model;
class Boo
{
    public $message = 'hello Boo';
}

并在你的composer.json中:

{
    //..
    "autoload": {
        "psr-4": {
             "MyNamespace\\Model\\": "/path/to/model/folder/",
             "MyNamespace\\Controller\\": "/path/to/controller/folder/"
        }
    }
}

设置完毕后,请致电:

composer dump-autoload