读取配置
最后更新于: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;
}
}
```
';