ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 读取配置(Reading Configurations) [Phalcon\\Config](http://docs.iphalcon.cn/api/Phalcon_Config.html)是一个用于将各种格式的配置文件读取到PHP对象的组件(使用适配器)。 ## 原生数组(Native Arrays) 下面的例子展示如何将本地数组导入[Phalcon\\Config](http://docs.iphalcon.cn/api/Phalcon_Config.html)对象。此选项提供了最好的性能,因为在这个请求中没有读取文件。 ~~~ <?php use Phalcon\Config; $settings = [ "database" => [ "adapter" => "Mysql", "host" => "localhost", "username" => "scott", "password" => "cheetah", "dbname" => "test_db" ], "app" => [ "controllersDir" => "../app/controllers/", "modelsDir" => "../app/models/", "viewsDir" => "../app/views/" ], "mysetting" => "the-value" ]; $config = new Config($settings); echo $config->app->controllersDir, "\n"; echo $config->database->username, "\n"; echo $config->mysetting, "\n"; ~~~ 如果你想更好的组织你的项目,你可以在另一个文件保存数组,然后读入它。 ~~~ <?php use Phalcon\Config; require "config/config.php"; $config = new Config($settings); ~~~ ## 文件适配器(File Adapters) 可用的适配器有: | Class | 解释 | | --- | --- | | [Phalcon\\Config\\Adapter\\Ini](http://docs.iphalcon.cn/api/Phalcon_Config_Adapter_Ini.html) | 使用INI文件来存储设置。内部适配器使用PHP函数 parse\_ini\_file。 | | [Phalcon\\Config\\Adapter\\Json](http://docs.iphalcon.cn/api/Phalcon_Config_Adapter_Json.html) | Uses JSON files to store settings. | | [Phalcon\\Config\\Adapter\\Php](http://docs.iphalcon.cn/api/Phalcon_Config_Adapter_Php.html) | Uses PHP multidimensional arrays to store settings. This adapter offers the best performance. | | [Phalcon\\Config\\Adapter\\Yaml](http://docs.iphalcon.cn/api/Phalcon_Config_Adapter_Yaml.html) | Uses YAML files to store settings. | ## 读取 INI 文件(Reading INI Files) INI文件是存储设置的常用方法。[Phalcon\\Config](http://docs.iphalcon.cn/api/Phalcon_Config.html)采用优化的PHP函数parse\_ini\_file读取这些文件。为方便访问,文件部分解析成子设置。 ~~~ [database] adapter = Mysql host = localhost username = scott password = cheetah dbname = test_db [phalcon] controllersDir = "../app/controllers/" modelsDir = "../app/models/" viewsDir = "../app/views/" [models] metadata.adapter = "Memory" ~~~ 你可以阅读如下所示的文件: ~~~ <?php use Phalcon\Config\Adapter\Ini as ConfigIni; $config = new ConfigIni("path/config.ini"); echo $config->phalcon->controllersDir, "\n"; echo $config->database->username, "\n"; echo $config->models->metadata->adapter, "\n"; ~~~ ## 合并配置(Merging Configurations) [Phalcon\\Config](http://docs.iphalcon.cn/api/Phalcon_Config.html)允许合并配置对象到另一个: ~~~ <?php use Phalcon\Config; $config = new Config( [ "database" => [ "host" => "localhost", "dbname" => "test_db", ], "debug" => 1, ] ); $config2 = new Config( [ "database" => [ "dbname" => "production_db", "username" => "scott", "password" => "secret", ], "logging" => 1, ] ); $config->merge($config2); print_r($config); ~~~ 上面的代码会产生以下内容: ~~~ Phalcon\Config Object ( [database] => Phalcon\Config Object ( [host] => localhost [dbname] => production_db [username] => scott [password] => secret ) [debug] => 1 [logging] => 1 ) ~~~ 有更多的适配器可用于这个组件:[Phalcon Incubator](https://github.com/phalcon/incubator) ## Injecting Configuration Dependency You can inject configuration dependency to controller allowing us to use[Phalcon\\Config](http://docs.iphalcon.cn/api/Phalcon_Config.html)inside[Phalcon\\Mvc\\Controller](http://docs.iphalcon.cn/api/Phalcon_Mvc_Controller.html). To be able to do that, add following code inside your dependency injector script. ~~~ <?php use Phalcon\Di\FactoryDefault; use Phalcon\Config; // Create a DI $di = new FactoryDefault(); $di->set( "config", function () { $configData = require "config/config.php"; return new Config($configData); } ); ~~~ Now in your controller you can access your configuration by using dependency injection feature using nameconfiglike following code: ~~~ <?php use Phalcon\Mvc\Controller; class MyController extends Controller { private function getDatabaseName() { return $this->config->database->dbname; } } ~~~