Settings Value Resolver
Gets a setting from DB/config/default layers with type validation.
Function signature
ogResolveSettingValue(setting_key, layers = array(), expected_type = 'string', fallback = '')
Categories
- Admin Tools
Parameters
setting_keySetting key to resolve from layered configuration sources.layersOrdered setting layers such as database, config, environment, or defaults.expected_typeExpected scalar or array type for the resolved setting value.fallbackFallback value returned when no valid setting value is found.Return value
Public-safe status string returned by the function for explicit controller branching or logging.
- success
- message
- data
Compatibility
Existing function name, slug, path, and call order preserved; advertised metadata corrected to the actual source behavior.
Minimum PHP version: 7.4
Security notes
Use caller-owned allowlists and context-specific escaping; validate admin actions, export fields, privacy plans, cache keys, templates, settings, routes, and ecommerce policies before production use.
Code
<?php
/*
* Copyright (c) 2026 Jeffery L. Paris <jparis@phpog.com>.
* Free for personal and internal use. Paid project use requires visible credit
* to Jeffery L. Paris. Corporate use requires a paid license fee unless a
* separate written license states otherwise.
*/
/**
* Gets a setting from DB/config/default layers with type validation.
*
* Primary use case: Site settings and admin controls.
* Typical inputs: setting key, expected type, defaults.
* Typical output: typed value.
*
* Implementation note: Validate type after resolution.
*
* @param string $setting_key Setting key to resolve.
* @param array $layers Ordered setting layers, highest priority first.
* @param string $expected_type Expected scalar type.
* @param mixed $fallback Fallback value.
* @return array Resolved setting result.
*/
function ogResolveSettingValue($setting_key, $layers = array(), $expected_type = 'string', $fallback = '') {
$result = array(
'success' => false,
'message' => '',
'data' => array()
);
$setting_key = trim((string)$setting_key);
if (empty($setting_key)) {
$result['message'] = 'Setting key is required.';
return $result;
}
if (!is_array($layers)) {
$layers = array();
}
$value = $fallback;
$source = 'fallback';
foreach ($layers as $source_name => $settings) {
if (is_array($settings) && array_key_exists($setting_key, $settings)) {
$value = $settings[$setting_key];
$source = (string)$source_name;
break;
}
}
$valid = true;
switch ($expected_type) {
case 'int':
if (is_numeric($value)) {
$value = (int)$value;
} else {
$valid = false;
}
break;
case 'bool':
$value = !empty($value);
break;
case 'array':
if (!is_array($value)) {
$valid = false;
}
break;
default:
if (is_scalar($value)) {
$value = (string)$value;
} else {
$valid = false;
}
break;
}
$result['success'] = $valid;
if ($valid) {
$result['message'] = 'Setting value resolved.';
} else {
$result['message'] = 'Setting value failed type validation.';
}
$result['data'] = array('key' => $setting_key, 'value' => $value, 'source' => $source, 'type' => $expected_type);
return $result;
}