Router::_handleNoRoute PHP Метод

_handleNoRoute() защищенный статический Метод

A special fallback method that handles URL arrays that cannot match any defined routes.
См. также: Router::url()
protected static _handleNoRoute ( array $url ) : string
$url array A URL that didn't match any routes
Результат string A generated URL for the array
    protected static function _handleNoRoute($url)
    {
        $named = $args = array();
        $skip = array_merge(array('bare', 'action', 'controller', 'plugin', 'prefix'), static::$_prefixes);
        $keys = array_values(array_diff(array_keys($url), $skip));
        // Remove this once parsed URL parameters can be inserted into 'pass'
        foreach ($keys as $key) {
            if (is_numeric($key)) {
                $args[] = $url[$key];
            } else {
                $named[$key] = $url[$key];
            }
        }
        list($args, $named) = array(Hash::filter($args), Hash::filter($named));
        foreach (static::$_prefixes as $prefix) {
            $prefixed = $prefix . '_';
            if (!empty($url[$prefix]) && strpos($url['action'], $prefixed) === 0) {
                $url['action'] = substr($url['action'], strlen($prefixed) * -1);
                break;
            }
        }
        if (empty($named) && empty($args) && (!isset($url['action']) || $url['action'] === 'index')) {
            $url['action'] = null;
        }
        $urlOut = array_filter(array($url['controller'], $url['action']));
        if (isset($url['plugin'])) {
            array_unshift($urlOut, $url['plugin']);
        }
        foreach (static::$_prefixes as $prefix) {
            if (isset($url[$prefix])) {
                array_unshift($urlOut, $prefix);
                break;
            }
        }
        $output = implode('/', $urlOut);
        if (!empty($args)) {
            $output .= '/' . implode('/', array_map('rawurlencode', $args));
        }
        if (!empty($named)) {
            foreach ($named as $name => $value) {
                if (is_array($value)) {
                    $flattend = Hash::flatten($value, '%5D%5B');
                    foreach ($flattend as $namedKey => $namedValue) {
                        $output .= '/' . $name . "%5B{$namedKey}%5D" . static::$_namedConfig['separator'] . rawurlencode($namedValue);
                    }
                } else {
                    $output .= '/' . $name . static::$_namedConfig['separator'] . rawurlencode($value);
                }
            }
        }
        return $output;
    }