<rmcreative>

RSS

Организация конфигов в Craft CMS

26 мая 2018

Довольно интересно сделаны конфиги в Craft CMS. Если вдруг о ней не слышали, это одна из лучших коммерческих на Yii.

Выглядят они примерно так:

return [
    '*' => [
        'omitScriptNameInUrls' => true,
    ],
 
    'example.test' => [
        'devMode' => true,
    ],
 
    'example.com' => [
        'cooldownDuration' => 0,
    ]
);

Соответственно, * применяется всегда, а специфичные для окружения уже мёржатся сверху. Имеет право на жизнь и работает предсказуемо.

Если вдруг захотите такое в Yii без Craft, сделать довольно несложно:

class Config
{
    private $config;
    private $environment;
 
    public function __construct(array $config, $environment = null)
    {
        $this->config = $config;
        $this->environment = $environment;
    }
 
    public static function fromFile($filename, $environment = null)
    {
        if (!file_exists($filename)) {
            return new static([], $environment);
        }
        return new static(require $filename, $environment);
    }
 
    public function toArray()
    {
        // If it's not a multi-environment config, return the whole thing
        if (!array_key_exists('*', $this->config)) {
            return $this->config;
        }
        // If no environment was specified, just look in the '*' array
        if ($this->environment === null) {
            return $this->config['*'];
        }
        $mergedConfig = [];
        foreach ($this->config as $environment => $environmentConfig) {
            if ($environment === '*' || $this->environment === $environment) {
                $mergedConfig = ArrayHelper::merge($mergedConfig, $environmentConfig);
            }
        }
        return $mergedConfig;
    }
}

Ну и в index.php:

$config = Config::fromFile(__DIR__ . '/../config/web.php', 'myenvironemnt_please_replace_me')->toArray();
(new yii\web\Application($config)->run();

Комментарии RSS

  1. №11268
    Shkarbatov Dmitriy
    Shkarbatov Dmitriy 26 мая 2018 г., 21:41:59

    Спасибо за информацию, интересно будет посмотреть.

  2. №11269
    mz
    mz 28 мая 2018 г., 18:54:05

    Подход так себе по сравнению с env или отдельными файлами. Как быть с приватными данными для прода?

  3. №11270
    Sam
    Sam 01 июня 2018 г., 13:47:57

    mz, если у кого-то есть доступ на чтение конфига, у него точно есть доступ на чтение переменных окружения.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.