我有

"autoload": {
      "psr-4": {
          "ACME": "src/",
      },
      "classmap": ["src/"],
      "files": ["mapper.php"],
      "exclude-from-classmap": ["mapper.php"]
  },

mapper.php 中,我试图为一些遗留的东西提供不同的命名空间。
<?php
class_alias(Some_Class::class, 'Cool\NameSpaced\Class');

我认为这无法构建,因为 mapper.php 正在使用 src/ 中的类,并且它们尚未被 Composer 加载。有没有办法做到这一点?

我运行的命令是 composer install --optimize-autoloader --no-dev

最佳答案

我已经试过你的例子,它运作良好。

它可能与您使用的 composer 命令有关。 试试这个 :

composer dump-autoload

这将刷新 autoload 部分的任何内容。

这是一个文件的安装文件:
composer.json
{
    "autoload": {
        "classmap": ["src/"],
        "files": ["mapper.php"]
    }
}
mapper.php
<?php

class_alias(Some_Class::class, 'Cool\NameSpaced\Class');
index.php
<?php

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

var_dump(class_exists(Some_Class::class));
var_dump(class_exists('Cool\NameSpaced\Class'));

在 CLI 中测试
$ composer dump-autoload
$ php index.php
bool(true);
bool(true);

如何找出别名工作?
commposer.json
{
    "autoload": {
        "classmap": ["src/"]
    }
}

在 CLI 中测试
$ composer dump-autoload
$ php index.php
bool(true);
bool(false);

关于php - 加载类映射后 Composer 自动加载文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46815613/

10-12 00:42
查看更多