X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fmain%2Fresolver%2Fcontroller%2Fclass_BaseControllerResolver.php;h=85662f67546c8282619cfcca6a86ca326a4f3807;hb=c2af8937094327995b326de0d7a0ca117b44aae0;hp=23e449ac913386c2b6092539f41cdfc2d39004b5;hpb=87cc8a475ec3a28e8f2f661bf4a7db7bc6a885e6;p=core.git diff --git a/inc/classes/main/resolver/controller/class_BaseControllerResolver.php b/inc/classes/main/resolver/controller/class_BaseControllerResolver.php index 23e449ac..85662f67 100644 --- a/inc/classes/main/resolver/controller/class_BaseControllerResolver.php +++ b/inc/classes/main/resolver/controller/class_BaseControllerResolver.php @@ -53,6 +53,16 @@ class BaseControllerResolver extends BaseResolver { $this->controllerPrefix = $controllerPrefix; } + /** + * Getter for controller prefix + * + * @param $controllerPrefix Last validated controllerPrefix + * @return void + */ + protected final function getControllerPrefix () { + return $this->controllerPrefix; + } + /** * Setter for controller name * @@ -72,6 +82,79 @@ class BaseControllerResolver extends BaseResolver { return $this->controllerName; } + /** + * "Loads" a given controller and instances it if not yet cached. If the + * controller was not found one of the default controllers will be used + * depending on wether news shall be displayed. + * + * @param $controllerName A controller name we shall look for + * @return $controllerInstance A loaded controller instance + * @throws InvalidControllerException Thrown if even the requested + * controller class is missing (bad!) + */ + protected function loadController ($controllerName) { + // Cache default command + $defaultController = $this->getConfigInstance()->readConfig('default_' . strtolower($this->getControllerPrefix()) . '_command'); + + // Init controller instance + $controllerInstance = null; + + // Default controller + $this->setClassName($this->getControllerPrefix() . 'DefaultNewsController'); + + // Generate the class name + //* DEBUG: */ echo __METHOD__.": Controller=".$controllerName; + if ($controllerName != $defaultController) { + // Create controller class name + $className = $this->getControllerPrefix() . '' . $this->convertToClassName($controllerName) . 'Controller'; + + // ... and set it + $this->setClassName($className); + } else { + // No news at main command or non-news command + $this->setClassName($this->getControllerPrefix() . 'DefaultNewsController'); + } + //* DEBUG: */ echo ", controller=".$this->getClassName()."
\n"; + + // Is this class loaded? + if (!class_exists($this->getClassName())) { + // Throw an exception here + throw new InvalidControllerException(array($this, $controllerName), self::EXCEPTION_INVALID_CONTROLLER); + } // END - if + + // Set default resolver config name + $resolverConfigEntry = ''; + + // Try to read a config entry for our resolver including controller name... ;-) + try { + // Create the resolver name + $resolverConfigEntry = sprintf("%s_cmd_%s_resolver_class", strtolower($this->getControllerPrefix()), strtolower($controllerName)); + + // Get the config, this will throw an exception if there is no special command resolver + $resolverClass = $this->getConfigInstance()->readConfig($resolverConfigEntry); + } catch (ConfigEntryNotFoundException $e) { + // Use default resolver entry + // @TODO Maybe we need to log this? + $resolverConfigEntry = strtolower($this->getControllerPrefix()) . '_cmd_resolver_class'; + } + + // Initiate the resolver and controller + $resolverInstance = ObjectFactory::createObjectByConfiguredName( + $resolverConfigEntry, + array( + $controllerName, + $this->getApplicationInstance() + ) + ); + $controllerInstance = ObjectFactory::createObjectByName( + $this->getClassName(), + array($resolverInstance) + ); + + // Return the result + return $controllerInstance; + } + /** * Checks wether the given controller is valid *