Sometimes I find it useful to match the current url against a set of keys, maybe to grab a model or define an active state. Things like that. An approach I've been using looks a little like:
<?php
function urlpattern ($path, $patterns) {
foreach ($patterns as $pattern => $name) {
if ($pattern === '*') continue; // skip default
if (preg_match($pattern, $path) === 1) {
return $name;
}
}
// if we made it here, return default
if (isset($patterns['*'])) {
return $patterns['*'];
}
}
Using it looks a bit like:
<?php
$patterns = [
'/about\/?$/' => 'about',
'/projects\/?$/' => 'projects',
'/projects\/(\d+)\/?$/' => 'project',
'*' => 'default'
];
$model = urlpattern($_SERVER['REQUEST_URI'], $patterns);