/** * Setup the application's routes * * @return void */ protected function _initRoutes() { $this->bootstrap('frontController'); /* @var $frontController Zend_Controller_Front */ $frontController = $this->getResource('frontController'); // Add PUT handler controller module $frontController->registerPlugin(new Zend_Controller_Plugin_PutHandler()); // BEGIN: Setup routes // Remove default routes $frontController->getRouter()->removeDefaultRoutes(); /* @var $router Zend_Controller_Router_Rewrite */ $router = $frontController->getRouter(); // developer.* hostname route $developerHostRoute = new Zend_Controller_Router_Route_Hostname(rtrim($this->_options['resources']['frontController']['developerUrl'], '/'), array('module' => 'developer')); $plainPathRoute = new Zend_Controller_Router_Route_Module(); $router->addRoute('developer', $developerHostRoute->chain($plainPathRoute)); // api.* hostname route $apiHostRoute = new Zend_Controller_Router_Route_Hostname(preg_replace('/\\/*v.+/i', '', $frontController->getBaseUrl()), array('module' => 'api')); // Format of routes in array is: URI Pattern => Controller $routes = array('/' => 'index_1', ':version/' => 'index_2', ':version/countries/*' => 'countries', ':version/country/*' => 'country_1', ':version/country/:countryId/*' => 'country_2'); // Chain REST resource URIs to controllers foreach ($routes as $pattern => $controller) { $router->addRoute($controller, $apiHostRoute->chain(new Zend_Controller_Router_Route($pattern, array('module' => 'api', 'controller' => preg_replace('/_[0-9]+/i', '', $controller))))); } // END: Setup routes }
public function testChainingWorksWithWildcardAndOneParameter() { $foo = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('module' => 'simple', 'controller' => 'foo', 'action' => 'bar')); $bar = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index')); $chain = $foo->chain($bar); $request = new Zend_Controller_Router_ChainTest_Request('http://www.zend.com/foo/bar/id/12'); $res = $chain->match($request); $this->assertEquals('simple', $res['module']); $this->assertEquals('foo', $res['controller']); $this->assertEquals('bar', $res['action']); }
public function testForcedSchemeAssembling() { $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com'); $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar'), array(), 'https'); $route->setRequest($request); $url = $route->assemble(); $this->assertEquals('https://www.zend.com', $url); }
public function testAssemblingWithHostnameWithChainHttp() { $foo = new Zend_Controller_Router_Route_Hostname('www.zend.com'); $bar = new Zend_Controller_Router_Route_Static('bar'); $chain = $foo->chain($bar); $this->_router->addRoute('foo-bar', $chain); $this->assertEquals('http://www.zend.com/bar', $this->_router->assemble(array(), 'foo-bar')); }
/** * Overrides assemble to add port * * @param array $data * @param boolean $reset * @return string */ public function assemble($data = array(), $reset = false, $encode = false, $partial = false) { // Default assemble $url = parent::assemble($data, $reset, $encode, $partial); // Add port if needed return $url . ($this->hasPort() ? ':' . $this->getPort() : ''); }
/** * Initialize custom CORE Routing * */ protected function _initRoutes() { $this->bootstrap('frontController'); $router = $this->frontController->getRouter(); $router->removeDefaultRoutes(); $userCountry = Zend_Auth::getInstance()->getIdentity() ? strtolower(Zend_Auth::getInstance()->getIdentity()->country) : 'en'; $mainRoute = new Zend_Controller_Router_Route_Hostname(getenv('HTTP_HOST'), array('language' => $userCountry ? $userCountry : 'en'), array('abbreviation' => '\\w+')); $defaultRoute = new Zend_Controller_Router_Route_Static('', array('module' => 'core', 'controller' => 'index', 'action' => 'index')); $router->addRoute('main-default', $mainRoute->chain($defaultRoute)); $moduleRoute = new Zend_Controller_Router_Route(':module/:controller/:action/*', array('module' => 'core', 'controller' => 'index', 'action' => 'index')); $router->addRoute('main-module', $mainRoute->chain($moduleRoute)); $languageRoute = new Zend_Controller_Router_Route(':language/:module/:controller/:action/*', array('module' => 'core', 'controller' => 'index', 'action' => 'index'), array('language' => '[a-z]{2}')); $router->addRoute('main-language', $mainRoute->chain($languageRoute)); // @todo: removed language, so that no longer works! $gridRoute = new Zend_Controller_Router_Route(':module/:controller/list/:order/:dir/:page', array('module' => 'core', 'controller' => 'index', 'order' => '', 'dir' => 'asc', 'page' => 1, 'action' => 'list'), array('page' => '\\d+')); $router->addRoute('grid', $mainRoute->chain($gridRoute)); $scheduleRoute = new Zend_Controller_Router_Route('/core/schedule/list/*', array('module' => 'core', 'controller' => 'schedule', 'action' => 'list')); $router->addRoute('schedule', $mainRoute->chain($scheduleRoute)); // @todo: this doesn't allow for languages! // added optional format parameter: (?:/(\d+))? // link can now be: /core/submit/mail/1/json $gridActionsRoute = new Zend_Controller_Router_Route_Regex('(\\S+)/(\\S+)/(edit|delete|reviewers|deletereviewer|chairs|deletechair|deletepresentation|mail|subscribe|unsubscribe)/(\\d+)(?:/(\\S+))?', array('language' => 'en', 'module' => 'core', 'controller' => '', 'action' => 'edit', 'format' => ''), array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'id', 5 => 'format'), '%s/%s/%s/%d/%s'); $router->addRoute('gridactions', $mainRoute->chain($gridActionsRoute)); $route = new Zend_Controller_Router_Route_Regex('core/review/list/(\\d+)', array('lang' => ':lang', 'module' => 'core', 'controller' => 'review', 'action' => 'list'), array(1 => 'id'), 'core/review/list/%d'); $router->addRoute('reviewlist', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route_Regex('core/review/listpersonal/(\\d+)', array('lang' => ':lang', 'module' => 'core', 'controller' => 'review', 'action' => 'listpersonal'), array(1 => 'id'), 'core/review/listpersonal/%d'); $router->addRoute('reviewlistpersonal', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route('/core/review/new/:id', array('lang' => ':lang', 'module' => 'core', 'controller' => 'review', 'action' => 'new', 'id' => ':id')); $router->addRoute('reviewnew', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route('/core/conference/timeslots/:id', array('lang' => ':lang', 'module' => 'core', 'controller' => 'conference', 'action' => 'timeslots', 'id' => ':id'), array('id' => '\\d+')); $router->addRoute('timeslots', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route('/getfile/:id', array('module' => 'core', 'controller' => 'file', 'action' => 'getfile'), array('id' => '\\d+')); $router->addRoute('getfile', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route_Regex('core/(file|session|presentation|user|event|poster)/(\\d+)', array('module' => 'core', 'action' => 'show'), array(1 => 'controller', 2 => 'id'), 'core/%s/%d'); $router->addRoute('oneitem', $mainRoute->chain($route)); $route = new Zend_Controller_Router_Route('core/feedback/:uuid', array('module' => 'core', 'controller' => 'feedback', 'action' => 'index'), array('uuid' => '[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89AB][0-9a-f]{3}-[0-9a-f]{12}')); $router->addRoute('feedback', $mainRoute->chain($route)); // route all feedback section requests to to same action controller $route = new Zend_Controller_Router_Route_Regex('core/feedback/(general|participant|logistics|programme)', array('module' => 'core', 'controller' => 'feedback', 'action' => 'feedbacksection'), array(1 => 'section'), 'core/feedback/%s'); $router->addRoute('feedbacksection', $mainRoute->chain($route)); // feedback download results $route = new Zend_Controller_Router_Route_Regex('core/feedback/getresults/(general|participant|logistics|programme)', array('module' => 'core', 'controller' => 'feedback', 'action' => 'getresults'), array(1 => 'section'), 'core/feedback/getresults/%s'); $router->addRoute('feedbackgetresults', $mainRoute->chain($route)); }
public function testRouteWithHostname() { $_SERVER['SERVER_NAME'] = 'www.zend.com'; $request = new Zend_Controller_Router_RewriteTest_Request_Stub('www.zend.com'); $route = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('controller' => 'host-foo', 'action' => 'host-bar')); $values = $route->match($request); $this->assertEquals('host-foo', $values['controller']); $this->assertEquals('host-bar', $values['action']); }
public function testChainingReuse() { $foo = new Zend_Controller_Router_Route_Hostname('www.zend.com', array('foo' => 'foo')); $profile = new Zend_Controller_Router_Route('user/:id', array('controller' => 'prof')); $article = new Zend_Controller_Router_Route('article/:id', array('controller' => 'art', 'action' => 'art')); $profileChain = $foo->chain($profile); $articleChain = $foo->chain($article); $request = new Zend_Controller_Router_ChainTest_Request('http://www.zend.com/user/1'); $res = $profileChain->match($request); $this->assertType('array', $res); $this->assertEquals('prof', $res['controller']); $request = new Zend_Controller_Router_ChainTest_Request('http://www.zend.com/article/1'); $res = $articleChain->match($request); $this->assertType('array', $res); $this->assertEquals('art', $res['controller']); $this->assertEquals('art', $res['action']); }