[TOC]
# 讀取配置
`Phalcon\Config` 是一個組件,用于將各種格式的配置文件(使用適配器)轉換為PHP對象,以便在應用程序中使用。
可以從`Phalcon\Config`獲取值,如下所示:
```php
<?php
use Phalcon\Config;
$config = new Config(
[
'test' => [
'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
<?php
use Phalcon\Config\Factory;
$options = [
'filePath' => 'path/config',
'adapter' => 'php',
];
$config = Factory::load($options);
```
## 原生數組
第一個示例顯示如何將本機數組轉換為`Phalcon\Config`對象。此選項提供最佳性能,因為在此請求期間不讀取任何文件。
```php
<?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
<?php
use Phalcon\Config;
require 'config/config.php';
$config = new Config($settings);
```
## File 適配器
可用的適配器是:
| 類 | 描述 |
| -------------------------------- | ------------------------------------------------------------------------------------------------ |
| `Phalcon\Config\Adapter\Ini` | 使用INI文件存儲設置。在內部,適配器使用PHP函數`parse_ini_file`。 |
| `Phalcon\Config\Adapter\Json` | 使用JSON文件存儲設置。 |
| `Phalcon\Config\Adapter\Php` | 使用PHP多維數組來存儲設置。此適配器提供最佳性能。 |
| `Phalcon\Config\Adapter\Yaml` | 使用YAML文件存儲設置。 |
## 讀取 INI 文件
Ini文件是存儲設置的常用方法。`Phalcon\Config` 使用優化的PHP函數`parse_ini_file`來讀取這些文件。文件部分被解析為子設置以便于訪問。
```ini
[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
<?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";
```
## 合并配置
`Phalcon\Config` 可以遞歸地將一個配置對象的屬性合并到另一個配置對象中。添加新屬性并更新現有屬性。
```php
<?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);
```
上面的代碼產生以下內容:
```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
<?php
use Phalcon\Config;
$config = new Config(
[
'phalcon' => [
'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
<?php
use Phalcon\Di;
use Phalcon\Config;
/**
* @return mixed|Config
*/
function config() {
$args = func_get_args();
$config = Di::getDefault()->getShared(__FUNCTION__);
if (empty($args)) {
return $config;
}
return call_user_func_array([$config, 'path'], $args);
}
```
## 注入配置依賴性
您可以將配置注入控制器,允許我們在`Phalcon\Mvc\Controller`中使用`Phalcon\Config`。為此,您必須將其作為服務添加到Dependency Injector容器中。在引導程序文件中添加以下代碼:
```php
<?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);
}
);
```
現在在您的控制器中,您可以使用名稱`config`使用依賴注入功能來訪問您的配置,如下面的代碼:
```php
<?php
use Phalcon\Mvc\Controller;
class MyController extends Controller
{
private function getDatabaseName()
{
return $this->config->database->dbname;
}
}
```
- 常規
- Welcome
- 貢獻
- 生成回溯
- 測試重現
- 單元測試
- 入門
- 安裝
- Web服務器設置
- WAMP
- XAMPP
- 教程
- 基礎教程
- 教程:創建一個簡單的REST API
- 教程:V?kuró
- 提升性能
- 教程:INVO
- 開發環境
- Phalcon Compose (Docker)
- Nanobox
- Phalcon Box (Vagrant)
- 開發工具
- Phalcon開發者工具的安裝
- Phalcon開發者工具的使用
- 調試應用程序
- 核心
- MVC應用
- 微應用
- 創建命令行(CLI)應用程序
- 依賴注入與服務定位
- MVC架構
- 服務
- 使用緩存提高性能
- 讀取配置
- 上下文轉義
- 類加載器
- 使用命名空間
- 日志
- 隊列
- 數據庫
- 數據庫抽象層
- Phalcon查詢語言(PHQL)
- ODM(對象文檔映射器)
- 使用模型
- 模型行為
- ORM緩存
- 模型事件
- 模型元數據
- 模型關系
- 模型事務
- 驗證模型
- 數據庫遷移
- 分頁
- 前端
- Assets管理
- 閃存消息
- 表單
- 圖像
- 視圖助手(標簽)
- 使用視圖
- Volt:模板引擎
- 業務邏輯
- 訪問控制列表(ACL)
- 注解解析器
- 控制器
- 調度控制器
- 事件管理器
- 過濾與清理
- 路由
- 在session中存儲數據
- 生成URL和路徑
- 驗證
- HTTP
- Cookies管理
- 請求環境
- 返回響應
- 安全
- 加密/解密
- 安全
- 國際化
- 國際化
- 多語言支持