Template Token Coverage Audit
Compares required template tokens against supplied render values before a token-only template is rendered.
Purpose
Compares required template tokens against supplied render values before a token-only template is rendered.
Snippet details
ContextTemplateLevelAdvancedCopy-and-paste statusMarked safe after review.Categories
- Security
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.
*/
/**
* Template Token Coverage Audit.
*
* Purpose:
* Compares required template tokens against supplied render values before a token-only template is rendered.
*
* @param string $template_html Token-only template content.
* @param array $provided_values Render values keyed by token name.
* @param array $required_tokens Required token names without braces.
* @return array Token coverage audit.
*/
function ogSnippetTemplateTokenCoverageAudit(string $template_html, array $provided_values, array $required_tokens): array {
preg_match_all('/\{([a-zA-Z0-9_]+)\}/', $template_html, $matches);
$found_tokens = array();
foreach ($matches[1] as $token_name) {
$found_tokens[$token_name] = true;
}
$missing_in_template = array();
$missing_values = array();
$unused_values = array();
foreach ($required_tokens as $required_token) {
if (!isset($found_tokens[$required_token])) {
$missing_in_template[] = $required_token;
}
if (!array_key_exists($required_token, $provided_values)) {
$missing_values[] = $required_token;
}
}
foreach ($provided_values as $value_key => $unused_value) {
if (!isset($found_tokens[$value_key])) {
$unused_values[] = $value_key;
}
}
return array(
'tokens_found' => array_keys($found_tokens),
'missing_in_template' => $missing_in_template,
'missing_values' => $missing_values,
'unused_values' => $unused_values
);
}
$enterprise_template = '<title>{ptitle}</title><main>{main}</main>';
$enterprise_values = array('ptitle' => 'Bridge Console', 'main' => 'Ready', 'unused_panel' => 'Aux');
$token_audit = ogSnippetTemplateTokenCoverageAudit($enterprise_template, $enterprise_values, array('ptitle', 'main', 'canonical'));
echo 'Missing values: '.count($token_audit['missing_values']);