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

Tia*_*ati 16 php autoload composer-php

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

"require": {
    ...
},
"require-dev": {
    ...
},
"autoload": {
    "psr-4": {
        ...
    },
    "files": [
        "src/function/test-function.php"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想文件夹中会有很多文件,ex: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",
]
Run Code Online (Sandbox Code Playgroud)

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

Aus*_*tin 22

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

composer.json

{
    "autoload": {
        "files": [
            "src/function/include.php"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

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


Com*_*ndZ 8

实际上,没有任何自定义代码,实际上有更好的方法.如果您正在使用类,则可以使用Composer的类映射功能.如果您正在处理包含函数的单个文件,则必须使用该files[]数组.

{
    "autoload": {
        "classmap": ["src/", "lib/", "Something.php"]
    }
}
Run Code Online (Sandbox Code Playgroud)