场景
. 项目总会遇到自定义全局函数的需要,下面就看看它的工作机制
分析
- composer 提供了4种autoload加载的模式 (
下面是laravel5.5 composer.json)
- classmap
- 读取对应的目录下面的所有文件,
- .在
vendor/composer/autoload_classmap.php
中组装 (key value)NameSpace + ClassName => ‘文件路径’,
- vendor/composer/autoload_real.php 中 ,加载
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
- psr-4
- 1见下面的列子, 将App\ 命名空间 映射到app/目录`
- 如果是有多层结构,就依次往下深入
- files
- 见
下面的例子,将下面的文件 require到全局的变量中
vendor/composer/autoload_real.php
文件
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit64f60075ed58f423d7ab93ac7aa330e5::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire64f60075ed58f423d7ab93ac7aa330e5($fileIdentifier, $file);
}
autoload 加载的模式
"autoload": {
"files" : [
"app/Support/helpers.php"
],
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
参考文档
解决
- 在app目录下建立一个文件 app/Support/helpers.php
- 在composer.json autoload选项中 添加
"files" : [
"app/Support/helpers.php"
],
- 执行 composer dump-autodump
这个命令会将 app/Support/helpers.php加载到vendor/composer/autoload_files.php文件中