Skip to content
← Back to Functions
Code

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;
}