Spec-Zone.ru › Phalcon 3

Чтение конфигураций

Phalcon\Config — это компонент, используемый для преобразования файлов конфигурации различных форматов (с помощью адаптеров) в объекты PHP для использования в приложении.

Встроенные массивы

Первый пример демонстрирует, как преобразовать встроенные массивы в объекты Phalcon\Config. Этот вариант обеспечивает наилучшую производительность, так как файлы не считываются во время этого запроса.

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";

Если вы хотите лучше организовать свой проект, вы можете сохранить массив в другом файле, а затем прочитать его.

use Phalcon\Config;

require "config/config.php";

$config = new Config($settings);

Адаптеры файлов

Доступные адаптеры:

Класс Описание
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 для чтения этих файлов. Разделы файлов парсятся в поднастройки для удобного доступа.

[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"

Вы можете прочитать файл следующим образом:

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 может рекурсивно сливать свойства одного объекта конфигурации в другой. Новые свойства добавляются, а существующие свойства обновляются.

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 доступны дополнительные адаптеры для этого компонента.

Инъекция зависимости конфигурации

Вы можете инжектировать зависимость конфигурации в контроллер, что позволит нам использовать Phalcon\Config внутри Phalcon\Mvc\Controller. Для этого добавьте следующий код в скрипт вашего инжектора зависимостей.

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, как показано в следующем коде:

use Phalcon\Mvc\Controller;

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

© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/config.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API