1. 云栖社区>
  2. PHP教程>
  3. 正文

非Laravel项目中集成使用 illuminate/config

作者:用户 来源:互联网 时间:2017-12-01 12:59:18

laravel项目使用config集成illuminate

非Laravel项目中集成使用 illuminate/config - 摘要: 本文讲的是非Laravel项目中集成使用 illuminate/config, Larvae的配置都在config目录下非常方便管理,可以通过 config()帮助函数来实现对配置项目的设置和获取,同时用 DotEnv来实现项目内环境变量的控制,非常强大和方便。我们在日常开发中如果没有使用Laravel框

Larvae的配置都在config目录下非常方便管理,可以通过 config()帮助函数来实现对配置项目的设置和获取,同时用 DotEnv来实现项目内环境变量的控制,非常强大和方便。我们在日常开发中如果没有使用Laravel框架,比如写一些脚本,或者自己写的项目框架,但是想集成这样的配置管理。这里就讲讲如何集成 illuminate/config到自己的项目中实现Laravel那种config配置。

首先通过composer来安装 illuminate/config和 vlucas/phpdotenv,composer.json如下: { "require": { "illuminate/config": "^5.2", "vlucas/phpdotenv": "^2.3" }, "autoload": { "psr-4": { "App//": "app/" } } } 创建.env文件,同时创建对应环境的env文件,为了解决不同环境加载不同配置的问题。比如: .env里面只写入当前环境,比如 local, develop, production .local.env表示本地开发环境的配置项 .develop.env表示测试环境的配置项 .production表示生产环境的配置项

关于Laravel在不同环境加载不同配置的方法可以参考我的这篇文章《 Laravel在不同的环境调用不同的配置文件》

我们在新建一个配置文件,比如 config/app.php 或者 config/path/to.php

加载配置文件,新建 app/Config.php

<?php namespace App; use Illuminate/Config/Repository; use Illuminate/Filesystem/Filesystem; class Config extends Repository { public function loadConfigFiles($path) { $fileSystem = new Filesystem(); if (!$fileSystem->isDirectory($path)) { return; } foreach ($fileSystem->allFiles($path) as $file) { $relativePathname = $file->getRelativePathname(); $pathInfo = pathinfo($relativePathname); if ($pathInfo['dirname'] == '.') { $key = $pathInfo['filename']; } else { $key = str_replace('/', '.', $pathInfo['dirname']) . '.' . $pathInfo['filename']; } $this->set($key, require $path . '/' . $relativePathname); } } }

Config继承 Repository, Repository中主要是对配置的操作,我们实现了自己的 loadConfigFiles方法,该方法用来加载我们前面 config目录下面所有的配置文件(包括层级),并用 .分格目录来设置配置项

通过 Dotenv来将 .*.env中的配置项目加载到环境变量,以至于在配置文件中可以通过 getenv()来获取,新建app/Application.php: <?php namespace App; use Illuminate/Filesystem/Filesystem; class Application { public $config; public $fileSystem; public $environment; public function __construct()tong { $this->config = new Config(); $this->fileSystem = new Filesystem(); $this->environment = $this->getEnvironment(); $this->config->loadConfigFiles(__DIR__ . '/../config'); } public function getEnvironment() { $environment = ''; $environmentPath = __DIR__ . '/../.env'; if ($this->fileSystem->isFile($environmentPath)) { $environment = trim($this->fileSystem->get($environmentPath)); $envFile = __DIR__ . '/../.' . $environment; if ($this->fileSystem->isFile($envFile . '.env')) { $dotEnv = new /Dotenv/Dotenv(__DIR__ . '/../', '.' . $environment . '.env'); $dotEnv->load(); } } return $environment; } }

这里主要做了两件事: 实例化Config,并加载config目录下面所有的配置 和 getEnvironment方法通过 Dotenv的 load方法来加载 .*.env中的配置项目到环境变量

引入autoload.php 新建 bootstrap/autoload.php <?php require __DIR__.'/../vendor/autoload.php'; 实例化Application <?php return new /App/Application(); 添加配置来测试一下,对应的配置内容如下: config/app.php <?php return [ 'test' => getenv('TEST') ]; .env local .local.env TEST='this is local test' .develop.env TEST='this is develop test' .production.env TEST='this is production test' 在项目跟目录下面新建一个执行文件,比如index.php: <?php require __DIR__.'/bootstrap/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; var_dump($app->config->get('app.test')); 执行 php index.php可以正确输出 "this is local test",当然你可以 .env中写入的是develop的话会输出 "this is develop test"

这样就实现了集成 illuminate/config和 Dotenv到我们自己项目中,以上内容只是演示,具体可以根据自己项目需要和个人编码爱好改写,本文示例代码请戳: https://github.com/yuansir/app-config

转载请注明:转载自 Ryan是菜鸟 | LNMP技术栈笔记

如果觉得本篇文章对您十分有益,何不打赏一下

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索laravel , 项目 , 使用 , config , 集成 illuminate ,以便于您获取更多的相关知识。