如何在没有重新安装的情况下使用Composer自动加载没有名称空间的类?

时间:2013-07-28 17:04:57

标签: php composer-php autoload silex

我只需要自动加载一些类,我不喜欢psr-0命名空间疯狂(没有冒犯)。

这曾经在我的项目中运作得很好:

"psr-0": {
    "": [
        "app/controller/",
        "app/model/"
    ]
}

由于某些原因它不再起作用,即使我使用相同的Composer版本。我需要它用于同时使用Silex的新项目。这可能与Silex发生冲突吗?

我知道“classmap”选项,但它有点无用,因为它要求我每次添加新类时都运行“composer install”。

有什么想法吗?

3 个答案:

答案 0 :(得分:10)

尝试使用“原始”JSON属性;不是数组(如在您的示例中)。 这对psr-4就像你说的那样适用于"": "app/"

{
"autoload": {
    "psr-4": {
        "Robbie\\": "core/",
        "": "app/"
    }
},
"require": {
        "monolog/monolog": "1.2.*"
    } 
}

这为我提供了目录Robbie下的core命名空间,作为不受composer控制的源的示例,第三方(供应商)Monolog命名空间以及下面源的默认或非命名空间app目录。

composer update之后,当包含生成的autoload.php时,所有这些都可用:

<?php    
require_once 'vendor/autoload.php';
// ...    
?>    

答案 1 :(得分:3)

使用classmap代替psr-4

"autoload": {
    "classmap": ["models/"]
}

答案 2 :(得分:2)

如果您只想重新生成自动加载文件,请使用composer dump-autoload