类映射加载后的Composer自动加载文件

4

我有

"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
1个回答

4

我尝试了你的示例,它很好用。

这可能与您使用的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'));


在命令行界面进行测试

$ composer dump-autoload
$ php index.php
bool(true);
bool(true);

如何了解别名的工作原理?
commposer.json 文件
{
    "autoload": {
        "classmap": ["src/"]
    }
}

在命令行界面中进行测试

$ composer dump-autoload
$ php index.php
bool(true);
bool(false);

1
{btsdaf} - Thellimist
太好了,它有帮助!在Some_Class内部使用require_once是什么意思?你能提供Some_class的代码吗? - Tomas Votruba
我明白了。你不应该需要像require_once('some_other_class.php');这样的类。这个问题应该已经被Composer处理了。 - Tomas Votruba
{btsdaf} - Tomas Votruba
I see. I hope this helped you - Tomas Votruba
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接