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",
]

Есть ли ленивый, как я …

11

Решение

Если вы не можете использовать пространство имен для своих функций (потому что это нарушит кучу кода или потому что вы не можете использовать 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);

Это неидеально, поскольку он будет загружать каждый файл для каждого запроса, независимо от того, используются ли используемые в нем функции, но он будет работать.

15

Другие решения

На самом деле есть лучший способ сделать это сейчас без какого-либо специального кода. Ты можешь использовать Компонент Commap для классов если вы работаете с классами. Если вы работаете с отдельными файлами, которые содержат функции, вам придется использовать files[] массив.

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