Configuration

Konfigurace aplikace je ve složce config/. Existují dva typy souborů:

.php souboryPro PHP framework — vrací PHP pole
.js souboryPro Node.js servery — exportuje JS objekt
Oba typy souborů by měly obsahovat identická data — liší se pouze syntaxí (PHP pole vs JS objekt).

Soubory

production.php / production.jsHlavní konfigurace — načítá se vždy
local.php / local.jsLokální přepisy — načítá se pouze pokud soubor existuje. Hodnoty se rekurzivně sloučí s production a přepíší je.

Na produkci existuje pouze production.php. Na lokálu je navíc local.php, který přepisuje production hodnoty (typicky databáze, SMTP, production=false).

// bootstrap/app.php — načtení konfigurace
$this->configData = require ROOT . 'config/production.php';
if(file_exists(ROOT . 'config/local.php')) {
    $this->configData = Arr::mergeRecursiveOverride(
        $this->configData,
        require ROOT . 'config/local.php'
    );
}
Soubor local.php nesmí být v gitu — obsahuje lokální přihlašovací údaje. Měl by být v .gitignore.

Struktura

production.php

return [
    'production' => true,

    'developmentEnvironmentForIps' => [
        '185.211.189.148',   // IP pro dev režim i na produkci
    ],

    'global' => [
        'httpsOnly' => true,
        'defaultTimezone' => 'Europe/Prague',
        'possibleLanguages' => ['en', 'cs']
    ],

    'database' => [
        'use'        => false,
        'charset'    => 'utf8mb4',
        'driver'     => 'mysqli',
        'hostname'   => 'localhost',
        'username'   => 'root',
        'database'   => 'moony',
        'password'   => '',
        'persistent' => false,
    ],

    'user' => [
        'login' => [
            'enabled'        => false,
            'validityInDays' => 90,
        ],
        'registration' => [
            'enabled'                  => false,
            'emailVerificationEnabled' => false,
        ],
        'home' => [
            'url' => '/',
        ],
    ],

    'mail' => [
        'from' => [
            'email' => 'noreply@example.com',
            'name'  => 'App Name',
        ],
        'smtp' => [
            'use'      => false,
            'hostname' => '',
            'username' => '',
            'password' => '',
            'secure'   => 'tls',
            'port'     => 587,
        ],
    ],

    'path' => [
        // Systémové cesty
        'system.twig.cache'          => ROOT . 'storage/cache/twig',
        'system.tracy.logs'          => ROOT . 'storage/log',
        'system.cron.locks'          => ROOT . '../locks',
        'system.database.migrations' => ROOT . 'storage/migrations',
        'system.robot-loader.cache'  => ROOT . 'storage/cache/robot-loader',
        'system.routes.cache'        => ROOT . 'storage/cache/routes',

        // Aplikační cesty
        'app.views' => ROOT . 'app/views',

        // Upload cesty
        // 'uploads.images' => ROOT . 'storage/uploads/images',
    ]
];

production.js (Node.js servery)

export const CONFIG = Object.freeze({
    production: true,

    database: {
        hostname: "localhost",
        username: "root",
        password: "secret",
        database: "moony"
    }
});

local.php (přepisy pro lokál)

return [
    'production' => false,

    'global' => [
        'httpsOnly' => false,
    ],

    'database' => [
        'use'      => true,
        'password' => 'localPassword',
    ],

    'mail' => [
        'smtp' => [
            'use'      => true,
            'hostname' => 'smtp.mailtrap.io',
            'username' => 'user',
            'password' => 'pass',
        ],
    ],

    'ideLocation' => 'C:\Program Files\JetBrains\PhpStorm\bin\phpstorm64.exe',
];

Použití

Přístup ke konfiguraci odkudkoli přes globální funkci config():

// Jednoduchá hodnota
$isProd = config('production');                    // true/false

// Vnořená hodnota
$timezone = config('global', 'defaultTimezone');   // 'Europe/Prague'

// Databázový config
$dbHost = config('database', 'hostname');           // 'localhost'

// Cesty
$viewsPath = config('path', 'app.views');           // '/var/www/app/views'

// Mail
$smtpHost = config('mail', 'smtp', 'hostname');     // 'smtp.example.com'
Pokud požadovaný klíč neexistuje, config() vyvolá trigger_error a vrátí null.

Sekce konfigurace

productionbool — produkční/vývojový režim
developmentEnvironmentForIpsIP adresy, které mají dev režim (Tracy) i na produkci
globalhttpsOnly, defaultTimezone, possibleLanguages
databasePřipojení k databázi (use, driver, hostname, credentials)
userLogin/registrace nastavení, home URL
mailSMTP nastavení a výchozí odesílatel
pathSystémové a aplikační cesty (cache, logy, views, uploady)
ideLocationCesta k IDE — při php moony make se vytvořený soubor automaticky otevře (pouze local)