public function & SetOrCreateDefaultRouteAsCurrent ($routeName, $controllerPc, $actionPc, $fallbackCall = FALSE) {
		$controllerPc = strtr($controllerPc, '/', '\\');
		$ctrlActionRouteName = $controllerPc.':'. $actionPc;
		$request = & $this->request;
		if (isset($this->routes[$ctrlActionRouteName])) {
			$defaultRoute = $this->routes[$ctrlActionRouteName];
		} else if (isset($this->routes[$routeName])) {
			$defaultRoute = $this->routes[$routeName];
		} else {
			$routeClass = self::$routeClass;
			$pathParamName = static::URL_PARAM_PATH;
			$defaultRoute = $routeClass::CreateInstance()
				->SetMatch("#/(?<$pathParamName>.*)#")
				->SetReverse("/<$pathParamName>")
				->SetName($routeName)
				->SetController($controllerPc)
				->SetAction($actionPc)
				->SetDefaults([
					$pathParamName					=> NULL,
					static::URL_PARAM_CONTROLLER	=> NULL,
					static::URL_PARAM_ACTION		=> NULL,
				]);
			$anyRoutesConfigured = $this->anyRoutesConfigured;
			$this->AddRoute($defaultRoute, NULL, TRUE, FALSE);
			$this->anyRoutesConfigured = $anyRoutesConfigured;
			if (!$request->IsInternalRequest()) 
				$request->SetParam(static::URL_PARAM_PATH, ($request->HasParam(static::URL_PARAM_PATH)
					? $request->GetParam(static::URL_PARAM_PATH, '.*')
					: $request->GetPath())
				);
		}
		$toolClass = self::$toolClass;
		$request
			->SetControllerName(str_replace('\\', '/', 
				$toolClass::GetDashedFromPascalCase($defaultRoute->GetController())
			))
			->SetActionName(
				$toolClass::GetDashedFromPascalCase($defaultRoute->GetAction())
			);
		$this->currentRoute = $defaultRoute;
		if (!$fallbackCall) $this->selfRouteName = $routeName;
		return $defaultRoute;
	}
public function & SetOrCreateDefaultRouteAsCurrent ($routeName, $controllerPc, $actionPc, $fallbackCall = FALSE) {
		$controllerPc = strtr($controllerPc, '/', '\\');
		$ctrlActionRouteName = $controllerPc.':'. $actionPc;
		$request = & $this->request;
		if (isset($this->routes[$ctrlActionRouteName])) {
			$defaultRoute = $this->routes[$ctrlActionRouteName];
		} else if (isset($this->routes[$routeName])) {
			$defaultRoute = $this->routes[$routeName];
		} else {
			$routeClass = self::$routeClass;
			$pathParamName = static::URL_PARAM_PATH;
			$defaultRoute = $routeClass::CreateInstance()
				->SetMatch("#/(?<$pathParamName>.*)#")
				->SetReverse("/<$pathParamName>")
				->SetName($routeName)
				->SetController($controllerPc)
				->SetAction($actionPc)
				->SetDefaults([
					$pathParamName					=> NULL,
					static::URL_PARAM_CONTROLLER	=> NULL,
					static::URL_PARAM_ACTION		=> NULL,
				]);
			$anyRoutesConfigured = $this->anyRoutesConfigured;
			$this->AddRoute($defaultRoute, NULL, TRUE, FALSE);
			$this->anyRoutesConfigured = $anyRoutesConfigured;
			if (!$request->IsInternalRequest()) 
				$request->SetParam(static::URL_PARAM_PATH, ($request->HasParam(static::URL_PARAM_PATH)
					? $request->GetParam(static::URL_PARAM_PATH, '.*')
					: $request->GetPath())
				);
		}
		$toolClass = self::$toolClass;
		$request
			->SetControllerName(str_replace('\\', '/', 
				$toolClass::GetDashedFromPascalCase($defaultRoute->GetController())
			))
			->SetActionName(
				$toolClass::GetDashedFromPascalCase($defaultRoute->GetAction())
			);
		$this->currentRoute = $defaultRoute;
		if (!$fallbackCall) $this->selfRouteName = $routeName;
		return $defaultRoute;
	}
public function & SetOrCreateDefaultRouteAsCurrent ( $ routeName , $ controllerPc , $ actionPc , $ fallbackCall = FALSE ) { $ controllerPc = strtr ( $ controllerPc , '/' , '\\' ) ; $ ctrlActionRouteName = $ controllerPc . ':' . $ actionPc ; $ request = & $ this -> request ; if ( isset ( $ this -> routes [ $ ctrlActionRouteName ] ) ) { $ defaultRoute = $ this -> routes [ $ ctrlActionRouteName ] ; } else if ( isset ( $ this -> routes [ $ routeName ] ) ) { $ defaultRoute = $ this -> routes [ $ routeName ] ; } else { $ routeClass = self :: $ routeClass ; $ pathParamName = static :: URL_PARAM_PATH ; $ defaultRoute = $ routeClass :: CreateInstance ( ) -> SetMatch ( "#/(?<$pathParamName>.*)#" ) -> SetReverse ( "/<$pathParamName>" ) -> SetName ( $ routeName ) -> SetController ( $ controllerPc ) -> SetAction ( $ actionPc ) -> SetDefaults ( [ $ pathParamName => NULL , static :: URL_PARAM_CONTROLLER => NULL , static :: URL_PARAM_ACTION => NULL , ] ) ; $ anyRoutesConfigured = $ this -> anyRoutesConfigured ; $ this -> AddRoute ( $ defaultRoute , NULL , TRUE , FALSE ) ; $ this -> anyRoutesConfigured = $ anyRoutesConfigured ; if ( ! $ request -> IsInternalRequest ( ) ) $ request -> SetParam ( static :: URL_PARAM_PATH , ( $ request -> HasParam ( static :: URL_PARAM_PATH ) ? $ request -> GetParam ( static :: URL_PARAM_PATH , '.*' ) : $ request -> GetPath ( ) ) ) ; } $ toolClass = self :: $ toolClass ; $ request -> SetControllerName ( str_replace ( '\\' , '/' , $ toolClass :: GetDashedFromPascalCase ( $ defaultRoute -> GetController ( ) ) ) ) -> SetActionName ( $ toolClass :: GetDashedFromPascalCase ( $ defaultRoute -> GetAction ( ) ) ) ; $ this -> currentRoute = $ defaultRoute ; if ( ! $ fallbackCall ) $ this -> selfRouteName = $ routeName ; return $ defaultRoute ; }
THIS METHOD IS MOSTLY USED INTERNALLY.

Try to find any existing route by `$routeName` argument
or try to find any existing route by `$controllerPc:$actionPc` arguments
combination and set this founded route instance as current route object.

Also re-target, re-set request object controller and action values
(or also path) to this newly configured current route object.

If there is no route by name or controller and action combination found,
create new empty route by configured route class from application core
and set up this new route by given `$routeName`, `$controllerPc`, `$actionPc`
with route match pattern to match any request `#/(?<path>.*)#` and with
reverse pattern `/<path>` to create URL by single `path` param only. And
add this newly created route into routes (into default routes group) and
set this new route as current route object.

This method is always called internally for following cases:
- When router has no routes configured and request is necessary
to route by query string arguments only (controller and action).
- When no route matched and when is necessary to create
default route object for homepage, handled by `Index:Index` by default.
- When no route matched and when router is configured to route
requests to default route if no route matched by
`$router->SetRouteToDefaultIfNotMatch();`.
- When is necessary to create not found route or error route
when there was not possible to route the request or when
there was any uncaught exception in controller or template
caught later by application.

@param string $routeName Always as `default`, `error` or `not_found`, by constants:
`\MvcCore\IRouter::DEFAULT_ROUTE_NAME`
`\MvcCore\IRouter::DEFAULT_ROUTE_NAME_ERROR`
`\MvcCore\IRouter::DEFAULT_ROUTE_NAME_NOT_FOUND`
@param string $controllerPc Controller name in pascal case.
@param string $actionPc Action name with pascal case without ending `Action` substring.
@param bool $fallbackCall `FALSE` by default. If `TRUE`, this function is called from error rendering fallback, self route name is not changed.
@return \MvcCore\Route|\MvcCore\IRoute
THIS METHOD IS MOSTLY USED INTERNALLY .