2014-10-03 46 views
6

作曲自动加载多个文件,我在我的最新项目中使用的作曲家和我的映射功能,这样在文件夹

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

我想会有很多的文件夹中的功能,例如:实时功能-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", 
] 

有没有偷懒跟我一样......

+1

这就是'autoload'函数的工作。它会自动加载“主文件”,这通常会包含一系列require语句。 [这是一个例子](https://github.com/WhitePayments/white-php/blob/master/White.php) – FloatingRock 2014-10-03 06:12:33

回答

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); 

这是不理想的,因为它会加载为每个请求每个文件,而不管是否将功能在它被使用,但它会工作。