Example #1
0
 /**
  * Generates an application url.
  *
  * @param array $options Array of options.
  *
  * @access public
  * @uses   Core\Registry();
  * @uses   Core\Config();
  *
  * @return string
  */
 public function toUrl(array $options)
 {
     static $_cache;
     $_cache_key = md5(serialize($options));
     $options = array_merge(array('controller' => $this->request->controller()), $options);
     if (!isset($_cache[$_cache_key])) {
         $mode = isset($options['_mode']) ? Core\Config()->modes($options['_mode']) : $this->request->mode();
         if ($mode != $this->request->mode()) {
             $routes = new Routes($mode);
             unset($options['_mode']);
             $route = $routes->extractUrl($options);
             $route['pattern'] = $routes->toRoute($route['pattern']);
         } else {
             unset($options['_mode']);
             $route = $this->routes->extractUrl($options);
             $route['pattern'] = $this->routes->toRoute($route['pattern']);
         }
         foreach ($route['pattern'] as $key => $url_element) {
             if (isset($url_element[0]) && $url_element[0] === Core\Config()->ROUTER['variables_prefix']) {
                 $option_key = str_replace(Core\Config()->ROUTER['variables_prefix'], '', $url_element);
                 $options[$option_key] = isset($options[$option_key]) ? $options[$option_key] : null;
                 $route['pattern'][$key] = $options[$option_key];
             }
         }
         foreach ($options as $key => $option) {
             if (array_key_exists($key, $route['maps_to'])) {
                 unset($options[$key]);
             }
         }
         if (Core\Config()->SESSION['transparency']) {
             $options[Core\Config()->SESSION['parameter']] = Core\Session()->getKey();
         }
         $_prefix = '';
         if (!Core\Config()->ROUTER['rewrite']) {
             $_prefix = '?';
         }
         $mode['url'] = $mode['url'] ? $mode['url'] . Core\Config()->ROUTER['separator'] : '';
         $_cache[$_cache_key] = $_prefix . $mode['url'] . rtrim(implode(Core\Config()->ROUTER['separator'], $route['pattern']), Core\Config()->ROUTER['separator']) . (!empty($options) ? '?' . http_build_query($options, false, '&') : '');
     }
     return $_cache[$_cache_key];
 }