Back to CMSApplication class

Method route

protected void
route
()
Route the application.
Returns
  • void
Since
  • 3.2

Method route - Source code

/**
 * Route the application.
 *
 * Routing is the process of examining the request environment to determine which
 * component should receive the request. The component optional parameters
 * are then set in the request object to be processed when the application is being
 * dispatched.
 *
 * @return  void
 *
 * @since   3.2
 */
protected function route()
{
    // Get the full request URI.
    $uri = clone Uri::getInstance();
    $router = static::getRouter();
    $result = $router->parse($uri, true);
    $active = $this->getMenu()->getActive();
    if ($active !== null && $active->type === 'alias' && $active->getParams()->get('alias_redirect') && \in_array($this->input->getMethod(), array('GET', 'HEAD'), true)) {
        $item = $this->getMenu()->getItem($active->getParams()->get('aliasoptions'));
        if ($item !== null) {
            $oldUri = clone Uri::getInstance();
            if ($oldUri->getVar('Itemid') == $active->id) {
                $oldUri->setVar('Itemid', $item->id);
            }
            $base = Uri::base(true);
            $oldPath = StringHelper::strtolower(substr($oldUri->getPath(), \strlen($base) + 1));
            $activePathPrefix = StringHelper::strtolower($active->route);
            $position = strpos($oldPath, $activePathPrefix);
            if ($position !== false) {
                $oldUri->setPath($base . '/' . substr_replace($oldPath, $item->route, $position, \strlen($activePathPrefix)));
                $this->setHeader('Expires', 'Wed, 17 Aug 2005 00:00:00 GMT', true);
                $this->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true);
                $this->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate', false);
                $this->sendHeaders();
                $this->redirect((string) $oldUri, 301);
            }
        }
    }
    foreach ($result as $key => $value) {
        $this->input->def($key, $value);
    }
    if ($this->isTwoFactorAuthenticationRequired()) {
        $this->redirectIfTwoFactorAuthenticationRequired();
    }
    // Trigger the onAfterRoute event.
    PluginHelper::importPlugin('system');
    $this->triggerEvent('onAfterRoute');
}