public static function parseMatch($match, $params)
{
if (empty($match)) {
return false;
}
if (is_array($match)) {
$_params = $params;
if (!static::_parseClosures($match, $params['request'], $_params)) {
return false;
}
} elseif (is_callable($match)) {
return (bool) $match($params['request'], $params);
}
$matchParams = array();
foreach ((array) $match as $key => $param) {
if (is_string($param)) {
if (preg_match('/^([A-Za-z0-9_\\*\\\\]+)::([A-Za-z0-9_\\*]+)$/', $param, $regexMatches)) {
$matchParams += array('controller' => $regexMatches[1], 'action' => $regexMatches[2]);
continue;
}
}
$matchParams[$key] = $param;
}
foreach ($matchParams as $type => $value) {
if ($value === '*') {
continue;
}
if ($type === 'controller') {
$value = Inflector::underscore($value);
}
$exists_in_request = array_key_exists($type, $params['params']);
if (!$exists_in_request || $value !== Inflector::underscore($params['params'][$type])) {
return false;
}
}
return true;
}