laravel5.5 自定义global helper function && 背后的加载机制

场景

. 项目总会遇到自定义全局函数的需要,下面就看看它的工作机制

分析

  • 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 文件
        # 加载files文件
        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/"
        }
    },

参考文档

  • https://laravel-china.org/topics/1002/deep-composer-autoload

解决

  • 在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文件中

猜你喜欢

转载自blog.csdn.net/cominglately/article/details/81223703