【问题标题】:Composer Autoload Multiple Files in FolderComposer 自动加载文件夹中的多个文件
【发布时间】:2014-11-28 05:18:50
【问题描述】:

我在我的最新项目中使用 composer 并像这样映射我的函数

"require": {
    ...
},
"require-dev": {
    ...
},
"autoload": {
    "psr-4": {
        ...
    },
    "files": [
        "src/function/test-function.php"
    ]
}

我想文件夹函数中会有很多文件,例如:real-function-1.php,real-function-2.php等。那么,composer可以调用文件夹函数中的所有文件吗?我懒得用了

"files": [
     "src/function/real-function-1.php",
     "src/function/real-function-2.php",
     ..,
     "src/function/real-function-100.php",
]

有没有像我一样懒惰的人...

【问题讨论】:

  • 这是autoload 函数的工作。它将自动加载“主文件”,该文件通常会包含一系列要求语句。 Here's an example

标签: php composer-php autoload


【解决方案1】:

如果你不能命名你的函数(因为它会破坏一堆代码,或者因为你不能使用 PSR-4),并且你不想创建包含你的函数的静态类(这可能然后被自动加载),您可以制作自己的全局包含文件,然后告诉作曲家包含它。

composer.json

{
    "autoload": {
        "files": [
            "src/function/include.php"
        ]
    }
}

include.php

$files = glob(__DIR__ . '/real-function-*.php');
if ($files === false) {
    throw new RuntimeException("Failed to glob for function files");
}
foreach ($files as $file) {
    require_once $file;
}
unset($file);
unset($files);

这是不理想的,因为它会为每个请求加载每个文件,无论其中的功能是否被使用,但它会起作用。

注意:确保将包含文件保存在 /real-function 或类似目录之外。或者它也会包含自己并变成递归函数并最终抛出内存异常。

【讨论】:

    【解决方案2】:

    现在实际上有一种更好的方法可以做到这一点,而无需任何自定义代码。如果您正在使用类,则可以使用Composer's classmap feature。如果您正在处理包含函数的单个文件,则必须使用 files[] 数组。

    {
        "autoload": {
            "classmap": ["src/", "lib/", "Something.php"]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2017-02-22
      • 2016-09-22
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多