【问题标题】:composer autoload file after classmaps are loaded加载类映射后作曲家自动加载文件
【发布时间】:2018-03-30 15:33:54
【问题描述】:

我有

"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

【问题讨论】:

    标签: php composer-php psr-4


    【解决方案1】:

    我试过你的例子,效果很好。

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

    【讨论】:

    • 我再次检查过,我认为这是由与我的构建有关的其他原因引起的。谢谢!
    • 我在脚本中使用require(__DIR__ . '/vendor/autoload.php');,但无法在Some_Class 中加载require_once。你有什么想法吗?
    • 很高兴它有帮助! require_once 里面的 Some_Class 是什么意思?能否提供Some_class的代码?
    • 我明白了。你永远不应该要求任何类,比如`require_once('some_other_class.php');`。那应该已经由作曲家处理了。
    • 我知道但有很多遗留的东西耸耸肩。我不确定为什么当我在 composer.json 中有 files 字段时,require_once 会失败,而当我删除该部分时,它会按预期工作......
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2021-12-18
    • 2019-02-15
    • 2013-12-09
    • 2016-08-13
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多