private function tryMatchingOptionalParams($pattern, $data, $url)
{
// first we check if we have any default params
$hasDefaultParams = false;
foreach ($data['params'] as $p) {
if (!is_null($p['default'])) {
$hasDefaultParams = true;
}
}
if (!$hasDefaultParams) {
return false;
}
// get parameters that we already have in the url
$methodUrlName = $data['method'];
if ($this->normalize) {
$methodUrlName = PathTransformations::methodNameToUrl($methodUrlName);
}
$urlParts = explode('/', $url);
$numIncludedParams = count($urlParts) - (array_search($methodUrlName, $urlParts) + 2);
$numAddedParams = 0;
$requiredParamNum = count($data['params']);
$loopIndex = 0;
foreach ($data['params'] as $p) {
if ($loopIndex >= $numIncludedParams) {
if (!is_null($p['default'])) {
$url .= $p['default'] . '/';
$numAddedParams++;
}
}
$loopIndex++;
}
if ($numIncludedParams + $numAddedParams != $requiredParamNum) {
return false;
}
return $this->doesPatternMatch($pattern, $data, $url);
}