protected function buildSubRouteConfigurations(array $routesConfiguration, array $subRoutesConfiguration, $subRouteKey, array $subRouteOptions)
{
$variables = isset($subRouteOptions['variables']) ? $subRouteOptions['variables'] : [];
$mergedSubRoutesConfigurations = [];
foreach ($subRoutesConfiguration as $subRouteConfiguration) {
foreach ($routesConfiguration as $routeConfiguration) {
$mergedSubRouteConfiguration = $subRouteConfiguration;
$mergedSubRouteConfiguration['name'] = sprintf('%s :: %s', isset($routeConfiguration['name']) ? $routeConfiguration['name'] : 'Unnamed Route', isset($subRouteConfiguration['name']) ? $subRouteConfiguration['name'] : 'Unnamed Subroute');
$mergedSubRouteConfiguration['name'] = $this->replacePlaceholders($mergedSubRouteConfiguration['name'], $variables);
if (!isset($mergedSubRouteConfiguration['uriPattern'])) {
throw new Exception\ParseErrorException('No uriPattern defined in route configuration "' . $mergedSubRouteConfiguration['name'] . '".', 1274197615);
}
if ($mergedSubRouteConfiguration['uriPattern'] !== '') {
$mergedSubRouteConfiguration['uriPattern'] = $this->replacePlaceholders($mergedSubRouteConfiguration['uriPattern'], $variables);
$mergedSubRouteConfiguration['uriPattern'] = $this->replacePlaceholders($routeConfiguration['uriPattern'], [$subRouteKey => $mergedSubRouteConfiguration['uriPattern']]);
} else {
$mergedSubRouteConfiguration['uriPattern'] = rtrim($this->replacePlaceholders($routeConfiguration['uriPattern'], [$subRouteKey => '']), '/');
}
if (isset($mergedSubRouteConfiguration['defaults'])) {
foreach ($mergedSubRouteConfiguration['defaults'] as $key => $defaultValue) {
$mergedSubRouteConfiguration['defaults'][$key] = $this->replacePlaceholders($defaultValue, $variables);
}
}
$mergedSubRouteConfiguration = Arrays::arrayMergeRecursiveOverrule($routeConfiguration, $mergedSubRouteConfiguration);
unset($mergedSubRouteConfiguration['subRoutes']);
$mergedSubRoutesConfigurations[] = $mergedSubRouteConfiguration;
}
}
return $mergedSubRoutesConfigurations;
}