Example #1
0
 /**
  * Constructor for a Route
  *
  * @param string $template Template string with parameter placeholders
  * @param array $defaults Array of defaults for the route.
  * @param string $options Array of parameters and additional options for the Route
  * @return void
  */
 public function __construct($template, $defaults = [], array $options = [])
 {
     if (strpos($template, ':lang') === false) {
         $template = '/:lang' . $template;
     }
     if ($template === '/:lang/') {
         $template = '/:lang';
     }
     $options['inflect'] = 'dasherize';
     $options['persist'][] = 'lang';
     if (!array_key_exists('lang', $options)) {
         if (self::$_langRegEx === null && ($langs = Configure::read('I18n.languages'))) {
             self::$_langRegEx = implode('|', array_keys(Hash::normalize($langs)));
         }
         $options['lang'] = self::$_langRegEx;
     }
     parent::__construct($template, $defaults, $options);
 }
Example #2
0
 /**
  * test the parse method of DashedRoute.
  *
  * @return void
  */
 public function testParse()
 {
     $route = new DashedRoute('/:controller/:action/:id', [], ['id' => Router::ID]);
     $route->compile();
     $result = $route->parse('/my-posts/my-view/1');
     $this->assertEquals('MyPosts', $result['controller']);
     $this->assertEquals('myView', $result['action']);
     $this->assertEquals('1', $result['id']);
     $route = new DashedRoute('/:controller/:action-:id');
     $route->compile();
     $result = $route->parse('/my-posts/my-view-1');
     $this->assertEquals('MyPosts', $result['controller']);
     $this->assertEquals('myView', $result['action']);
     $this->assertEquals('1', $result['id']);
     $route = new DashedRoute('/:controller/:action/:slug-:id', [], ['id' => Router::ID]);
     $route->compile();
     $result = $route->parse('/my-posts/my-view/the-slug-1');
     $this->assertEquals('MyPosts', $result['controller']);
     $this->assertEquals('myView', $result['action']);
     $this->assertEquals('1', $result['id']);
     $this->assertEquals('the-slug', $result['slug']);
     $route = new DashedRoute('/admin/:controller', ['prefix' => 'admin', 'action' => 'index']);
     $route->compile();
     $result = $route->parse('/admin/');
     $this->assertFalse($result);
     $result = $route->parse('/admin/my-posts');
     $this->assertEquals('MyPosts', $result['controller']);
     $this->assertEquals('index', $result['action']);
     $route = new DashedRoute('/media/search/*', ['controller' => 'Media', 'action' => 'searchIt']);
     $result = $route->parse('/media/search');
     $this->assertEquals('Media', $result['controller']);
     $this->assertEquals('searchIt', $result['action']);
     $this->assertEquals([], $result['pass']);
     $result = $route->parse('/media/search/tv_shows');
     $this->assertEquals('Media', $result['controller']);
     $this->assertEquals('searchIt', $result['action']);
     $this->assertEquals(['tv_shows'], $result['pass']);
 }
Example #3
0
 /**
  * @return void
  */
 public function testMatchThenParse()
 {
     $route = new DashedRoute('/plugin/:controller/:action', ['plugin' => 'Vendor/PluginName']);
     $url = $route->match(['plugin' => 'Vendor/PluginName', 'controller' => 'ControllerName', 'action' => 'actionName']);
     $expectedUrl = '/plugin/controller-name/action-name';
     $this->assertEquals($expectedUrl, $url);
     $result = $route->parse($expectedUrl);
     $this->assertEquals('ControllerName', $result['controller']);
     $this->assertEquals('actionName', $result['action']);
     $this->assertEquals('Vendor/PluginName', $result['plugin']);
 }