Configuration
Konfigurace aplikace je ve složce config/. Existují dva typy souborů:
| .php soubory | Pro PHP framework — vrací PHP pole |
| .js soubory | Pro 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.js | Hlavní konfigurace — načítá se vždy |
| local.php / local.js | Loká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
| production | bool — produkční/vývojový režim |
| developmentEnvironmentForIps | IP adresy, které mají dev režim (Tracy) i na produkci |
| global | httpsOnly, defaultTimezone, possibleLanguages |
| database | Připojení k databázi (use, driver, hostname, credentials) |
| user | Login/registrace nastavení, home URL |
| SMTP nastavení a výchozí odesílatel | |
| path | Systémové a aplikační cesty (cache, logy, views, uploady) |
| ideLocation | Cesta k IDE — při php moony make se vytvořený soubor automaticky otevře (pouze local) |
