Composer自动加载文件夹中的多个文件

时间:2014-10-03 06:06:46

标签: php composer-php autoload

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

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

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

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

有没有像我这样的懒人......

2 个答案:

答案 0 :(得分:17)

如果你不能命名你的函数(因为它会破坏一堆代码,或者因为你不能使用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);

这是不理想的,因为它会为每个请求加载每个文件,无论其中的函数是否被使用,但它都可以工作。

答案 1 :(得分:7)

在没有任何自定义代码的情况下,现在实际上有更好的方法。如果您正在使用课程,则可以使用Composer's classmap feature。如果您正在处理包含函数的单个文件,则必须使用files[]数组。

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