读取配置(Reading Configurations)

最后更新于:2018-09-01 07:08:51

Phalcon\Config 是一个用于将各种格式的配置文件读取到PHP对象的组件(使用适配器)。

原生数组(Native Arrays)

下面的例子展示如何将本地数组导入 Phalcon\Config 对象。此选项提供了最好的性能,因为在这个请求中没有读取文件。

<?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 使用INI文件来存储设置。内部适配器使用PHP函数 parse_ini_file。
Phalcon\Config\Adapter\Json Uses JSON files to store settings.
Phalcon\Config\Adapter\Php Uses PHP multidimensional arrays to store settings. This adapter offers the best performance.
Phalcon\Config\Adapter\Yaml Uses YAML files to store settings.

读取 INI 文件(Reading INI Files)

INI文件是存储设置的常用方法。 Phalcon\Config 采用优化的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 允许合并配置对象到另一个:

<?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

Injecting Configuration Dependency

You can inject configuration dependency to controller allowing us to use Phalcon\Config inside Phalcon\Mvc\Controller. 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 name config like following code:

<?php

use Phalcon\Mvc\Controller;

class MyController extends Controller
{
    private function getDatabaseName()
    {
        return $this->config->database->dbname;
    }
}