Example #1
0
 /**
  * Connects a new Route in the router.
  *
  * Routes are a way of connecting request urls to objects in your application.  At their core routes
  * are a set or regular expressions that are used to match requests to destinations.
  *
  * Examples:
  *
  * `Router::connect('/:controller/:action/*');`
  *
  * The first parameter will be used as a controller name while the second is used as the action name.
  * the '/*' syntax makes this route greedy in that it will match requests like `/posts/index` as well as requests
  * like `/posts/edit/1/foo/bar`.
  *
  * `Router::connect('/home-page', array('controller' => 'pages', 'action' => 'display', 'home'));`
  *
  * The above shows the use of route parameter defaults. And providing routing parameters for a static route.
  *
  * {{{
  * Router::connect(
  *   '/:lang/:controller/:action/:id',
  *   array(),
  *   array('id' => '[0-9]+', 'lang' => '[a-z]{3}')
  * );
  * }}}
  *
  * Shows connecting a route with custom route parameters as well as providing patterns for those parameters.
  * Patterns for routing parameters do not need capturing groups, as one will be added for each route params.
  *
  * @param string $route A string describing the template of the route
  * @param array $defaults An array describing the default route parameters. These parameters will be used by default
  *   and can supply routing parameters that are not dynamic. See above.
  * @param array $options An array matching the named elements in the route to regular expressions which that
  *   element should match.  Also contains additional parameters such as which routed parameters should be
  *   shifted into the passed arguments. As well as supplying patterns for routing parameters.
  * @see routes
  * @return array Array of routes
  * @access public
  * @static
  */
 public static function connect($route, $defaults = array(), $options = array())
 {
     foreach (self::$__prefixes as $prefix) {
         if (isset($defaults[$prefix])) {
             $defaults['prefix'] = $prefix;
             break;
         }
     }
     if (isset($defaults['prefix'])) {
         self::$__prefixes[] = $defaults['prefix'];
         self::$__prefixes = array_keys(array_flip(self::$__prefixes));
     }
     $defaults += array('action' => 'index', 'plugin' => null);
     $routeClass = 'CakeRoute';
     if (isset($options['routeClass'])) {
         $routeClass = $options['routeClass'];
         unset($options['routeClass']);
     }
     $Route = new $routeClass($route, $defaults, $options);
     if ($routeClass !== 'CakeRoute' && !is_subclass_of($Route, 'CakeRoute')) {
         trigger_error(__('Route classes must extend CakeRoute', true), E_USER_WARNING);
         return false;
     }
     self::$routes[] = $Route;
     return self::$routes;
 }