博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel源码入门-启动引导过程(六)LoadEnvironmentVariables
阅读量:6235 次
发布时间:2019-06-22

本文共 2831 字,大约阅读时间需要 9 分钟。

hot3.png

在 《》中第一个要载入的是 LoadEnvironmentVariables,也就是 Foundation\Http\Kernel::bootstrapers[] 的第一个,\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables,如下:

075541_gdu9_32037.png

 

// Illuminate\Foundation\Http\Kernel.php 片段   /**     * The bootstrap classes for the application.     * 引导类,起引导作用的类     *     * @var array     */    protected $bootstrappers = [        // 载入服务器环境变量(.env 文件)        \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,        // 载入配置信息(config 目录)        \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,        // 配置如何处理异常        \Illuminate\Foundation\Bootstrap\HandleExceptions::class,        // 注册 Facades        \Illuminate\Foundation\Bootstrap\RegisterFacades::class,        // 注册 Providers        \Illuminate\Foundation\Bootstrap\RegisterProviders::class,        // 启动 Providers        \Illuminate\Foundation\Bootstrap\BootProviders::class,    ];

我们再直接贴出 LoadEnvironmentVariables 类的代码,进行分析,非常直观,如下:

configurationIsCached()) { return; } $this->checkForSpecificEnvironmentFile($app); try { // 这里语句分两部分,new 一个 Dotenv 对象,该对象调用 load() 方法, // 载入了根目录 .env 文件的配置。 (new Dotenv($app->environmentPath(), $app->environmentFile()))->load(); } catch (InvalidPathException $e) { // } } /** * Detect if a custom environment file matching the APP_ENV exists. * * @param \Illuminate\Contracts\Foundation\Application $app * @return void */ protected function checkForSpecificEnvironmentFile($app) { if (php_sapi_name() == 'cli' && with($input = new ArgvInput)->hasParameterOption('--env')) { $this->setEnvironmentFilePath( $app, $app->environmentFile().'.'.$input->getParameterOption('--env') ); } if (! env('APP_ENV')) { return; } $this->setEnvironmentFilePath( $app, $app->environmentFile().'.'.env('APP_ENV') ); } /** * Load a custom environment file. * * @param \Illuminate\Contracts\Foundation\Application $app * @param string $file * @return void */ protected function setEnvironmentFilePath($app, $file) { if (file_exists($app->environmentPath().'/'.$file)) { $app->loadEnvironmentFrom($file); } }}

完成后,我们就可以使用Laravel提供的帮助函数 env() 来获取环境变量的值,如 dump(env('APP_URL'))。

附1:这里有一个细微的问题,就是 .env 文件中有一个配置项 APP_ENV=local,因此,应该将 .env 文件改名为 .env.local 也可以读取到该文件。但如果在  APP_ENV=local 的情况下,把 名字改为其他的,如 .env.localxx,就会出错,报   catch (InvalidPathException $e)  错误,当然 Laravel 没有写出报错的提示语。

附2:置于为什么有这个 .env?一开始,我也没有质疑,无所谓的样子,但实际是 Lavravl 的一个团队协作的考虑,具体参见:《》。

附3:Laravel的帮助函数都位于 vendor/laravel/framework/src/Illuminate/Foundation/helpers.php。

附4:.env 中包含了重要配置,比如数据库mysql 的配置,开发提前设置,但团队开发请注意附2。

转载于:https://my.oschina.net/zhmsong/blog/900617

你可能感兴趣的文章
WPF几个核心类的类层次结构
查看>>
浏览器访问设备出现白条
查看>>
可变参数
查看>>
关于最近学习出现的错误,及解决的想法
查看>>
「SP122」STEVE - Voracious Steve 解题报告
查看>>
图片压缩上传
查看>>
Spark RDD Transformation 简单用例(一)
查看>>
蓝色光标拟增发700万股
查看>>
C/C++一个容易犯的低级错误--分号引起的错误
查看>>
MySQL学习总结(五)表数据查询
查看>>
html5的web存储
查看>>
Android 输入法键盘和activity页面遮挡问题解决
查看>>
什么是LogDashboard?
查看>>
WM_COPYDATA+BHO+Qt实现进程间通信
查看>>
把文件或文件夹设置为受保护的操作系统文件或文件夹
查看>>
JConsole监控远程Tomcat服务器 遇到的坑
查看>>
TP 3.2.3 接入PHPMailer
查看>>
gcc降版本方法 - [学习]
查看>>
使用正则表达式,取得点击次数,函数抽离
查看>>
TensorFlow学习---入门(一)-----MNIST机器学习
查看>>