; 區塊繼承:[child : parent] [production] ; 基礎配置 [staging : production] ; 覆蓋 staging 專用 [testing : production] phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 phpSettings.error_reporting = E_ALL & ~E_DEPRECATED phpSettings.date.timezone = "Asia/Taipei" phpSettings.max_execution_time = 30 phpSettings.memory_limit = "256M" phpSettings.post_max_size = "20M" phpSettings.upload_max_filesize = "10M"
includePaths.library = APPLICATION_PATH "/../library" includePaths.models = APPLICATION_PATH "/models" autoloaderNamespaces.0 = "My_" autoloaderNamespaces.1 = "ZendX_" autoloaderNamespaces.2 = "Doctrine_"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.frontController.params.prefixDefaultModule = "1" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.plugins.layout = "My_Controller_Plugin_Layout" resources.frontController.plugins.acl = "My_Controller_Plugin_Acl"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = "default" resources.layout.contentKey = "content"
resources.view.encoding = "UTF-8" resources.view.doctype = "HTML5" resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/views/helpers" resources.view.basePath = APPLICATION_PATH "/views/scripts"
resources.db.adapter = "PDO_MYSQL" resources.db.params.host = "localhost" resources.db.params.port = 3306 resources.db.params.dbname = "myapp" resources.db.params.username = "app_user" resources.db.params.password = "secret" resources.db.params.charset = "utf8mb4" resources.db.params.driver_options.1002 = "SET NAMES utf8mb4" ; PDO::MYSQL_ATTR_INIT_COMMAND resources.db.isDefaultTableAdapter = true resources.db.defaultMetadataCache = "cache"
resources.cachemanager.database.frontend.name = "Core" resources.cachemanager.database.frontend.options.lifetime = 3600 resources.cachemanager.database.frontend.options.automatic_serialization = true resources.cachemanager.database.backend.name = "File" resources.cachemanager.database.backend.options.cache_dir = APPLICATION_PATH "/../data/cache/db" resources.cachemanager.page.frontend.name = "Capture" resources.cachemanager.page.frontend.options.lifetime = 600 resources.cachemanager.page.backend.name = "File" resources.cachemanager.page.backend.options.cache_dir = APPLICATION_PATH "/../data/cache/page"
resources.session.save_path = APPLICATION_PATH "/../data/session" resources.session.use_only_cookies = true resources.session.remember_me_seconds = 864000 resources.session.gc_maxlifetime = 864000
resources.navigation.pages.home.label = "首頁" resources.navigation.pages.home.controller = "index" resources.navigation.pages.home.action = "index" resources.translate.adapter = "Array" resources.translate.data = APPLICATION_PATH "/languages" resources.translate.locale = "zh_TW" resources.translate.options.scan = "directory" resources.translate.options.disableNotices = true
resources.log.stream.writerName = "Stream" resources.log.stream.writerParams.stream = APPLICATION_PATH "/../data/logs/app.log" resources.log.stream.writerParams.mode = "a" resources.log.stream.filterName = "Priority" resources.log.stream.filterParams.priority = 7 ; DEBUG resources.log.firebug.writerName = "Firebug" resources.log.firebug.filterParams.priority = 6 ; INFO
resources.db.params.password = ""
需在 Bootstrap.php 啟用:
protected function _initConfig() {
$this->getApplication()->getOptions(); // 觸發解析
}
resources.frontController.plugins[] = "My_Plugin_One" resources.frontController.plugins[] = "My_Plugin_Two" resources.router.routes.page.type = "Zend_Controller_Router_Route_Regex" resources.router.routes.page.route = "page/(\d+)" resources.router.routes.page.defaults.controller = "page" resources.router.routes.page.defaults.action = "view" resources.router.routes.page.map.1 = "id"
resources.modules[] = "" ; 等同於各模組載入各自 configs/module.ini ; 模組內 Bootstrap 可覆蓋全域資源
// scripts/validate-config.php
$env = $argv[1] ?? 'production';
$config = new Zend_Config_Ini('/path/to/application.ini', $env, true);
$required = [
'resources.db.params.host',
'resources.db.params.dbname',
'resources.db.params.username',
];
foreach ($required as $path) {
$keys = explode('.', $path);
$val = $config;
foreach ($keys as $k) {
if (!isset($val->$k)) {
fwrite(STDERR, "Missing config: $path\n");
exit(1);
}
$val = $val->$k;
}
}
echo "Config validation passed for [$env]\n";