读取配置

最后更新于:2022-04-02 05:14:00

[TOC] # 读取配置 `Phalcon\Config` 是一个组件,用于将各种格式的配置文件(使用适配器)转换为PHP对象,以便在应用程序中使用。 可以从`Phalcon\Config`获取值,如下所示: ```php [ 'parent' => [ 'property' => 1, 'property2' => 'yeah', ], ], ] ); echo $config->get('test')->get('parent')->get('property'); // displays 1 echo $config->test->parent->property; // displays 1 echo $config->path('test.parent.property'); // displays 1 ``` ## 工厂 使用`adapter`选项加载Config Adapter类,如果未提供扩展名,则将其添加到`filePath`。 ```php 'path/config', 'adapter' => 'php', ]; $config = Factory::load($options); ``` ## 原生数组 第一个示例显示如何将本机数组转换为`Phalcon\Config`对象。此选项提供最佳性能,因为在此请求期间不读取任何文件。 ```php [ '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 phalcon->controllersDir, "\n"; echo $config->database->username, "\n"; echo $config->models->metadata->adapter, "\n"; ``` ## 合并配置 `Phalcon\Config` 可以递归地将一个配置对象的属性合并到另一个配置对象中。添加新属性并更新现有属性。 ```php [ '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); ``` 上面的代码产生以下内容: ```bash 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)中有更多适用于此组件的适配器。 ## 嵌套配置 您可以使用`Phalcon\Config::path` 方法轻松访问嵌套配置值。该方法允许获得值,而不关心路径的某些部分不存在的事实。我们来看一个例子: ```php [ 'baseuri' => '/phalcon/' ], 'models' => [ 'metadata' => 'memory' ], 'database' => [ 'adapter' => 'mysql', 'host' => 'localhost', 'username' => 'user', 'password' => 'passwd', 'name' => 'demo' ], 'test' => [ 'parent' => [ 'property' => 1, 'property2' => 'yeah' ], ], ] ); // 使用点作为分隔符 $config->path('test.parent.property2'); // yeah $config->path('database.host', null, '.'); // localhost $config->path('test.parent'); // Phalcon\Config // 使用斜杠作为分隔符。 还可以指定默认值,如果配置选项不存在,将返回默认值。 $config->path('test/parent/property3', 'no', '/'); // no Config::setPathDelimiter('/'); $config->path('test/parent/property2'); // yeah ``` 以下示例显示如何创建有用的Facade以访问嵌套配置值: ```php getShared(__FUNCTION__); if (empty($args)) { return $config; } return call_user_func_array([$config, 'path'], $args); } ``` ## 注入配置依赖性 您可以将配置注入控制器,允许我们在`Phalcon\Mvc\Controller`中使用`Phalcon\Config`。为此,您必须将其作为服务添加到Dependency Injector容器中。在引导程序文件中添加以下代码: ```php set( 'config', function () { $configData = require 'config/config.php'; return new Config($configData); } ); ``` 现在在您的控制器中,您可以使用名称`config`使用依赖注入功能来访问您的配置,如下面的代码: ```php config->database->dbname; } } ```
';