【问题标题】:How to autoload classes without namespaces with Composer without reinstalling?如何在不重新安装的情况下使用 Composer 自动加载没有命名空间的类?
【发布时间】:2013-07-28 10:50:00
【问题描述】:

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

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

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

由于某种原因,它不再工作了,即使我使用的是相同的 Composer 版本。我需要它用于也使用 Silex 的新项目。这会不会和 Silex 有冲突?

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

有什么想法吗?

【问题讨论】:

    标签: php composer-php autoload silex


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我认为给作曲家文件一个名字和运行作曲家安装作曲家更新作曲家安装作曲家更新的组合终于做到了
    • @Toskan 确实如此,至少对我来说是这样
    【解决方案2】:

    使用classmap 代替psr-4:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,这似乎也有助于截断提问者的 sn-p。所以似乎无论如何都必须明确定义,默认情况下不启用 psr。
      猜你喜欢
      • 2019-02-22
      • 1970-01-01
      • 2015-02-14
      • 2020-04-10
      • 2019-01-22
      • 2014-05-02
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      相关资源
      最近更新 更多