/** * 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); }
/** * 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']); }
/** * @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']); }