routes; } public function getDefaultRouteOptions(): array { $defaultRouteOptions = []; if ($this->routes !== []) { foreach ($this->routes as $routeIdentifier => $routeOptions) { $defaultRouteOptions[$routeIdentifier] = array_replace_recursive( $this->routeOptions, $routeOptions, [ 'module' => $this, 'packageName' => $this->packageName, 'absolutePackagePath' => $this->absolutePackagePath, 'access' => $this->access, ] ); } } elseif ($this->hasSubmoduleOverview()) { // Show card-based overview of all submodules $defaultRouteOptions['_default'] = array_replace_recursive( $this->routeOptions, [ 'target' => \TYPO3\CMS\Backend\Controller\SubmoduleOverviewController::class . '::handleRequest', 'module' => $this, 'packageName' => $this->packageName, 'absolutePackagePath' => $this->absolutePackagePath, 'access' => $this->access, ] ); } elseif ($this->hasSubModules()) { // In case no routes are defined but the module has submodules, // fall back and use the first submodules' route options instead. $submodules = $this->getSubModules(); $firstSubModule = reset($submodules); $defaultRouteOptions = $firstSubModule->getDefaultRouteOptions(); } if (!isset($defaultRouteOptions['_default'])) { throw new NonRoutableModuleException( 'No default route could be resolved for module ' . $this->identifier, 1674063354 ); } return $defaultRouteOptions; } public static function createFromConfiguration(string $identifier, array $configuration): static { $obj = parent::createFromConfiguration($identifier, $configuration); $obj->routes = $configuration['routes'] ?? []; return $obj; } }