public function testConcurrentRoutes() { $request = new Request(); $request->set(['amodule', 'correct', 'foo']); $this->router->addRoute('/:module/:controller/:action', ['module' => 1, 'controller' => 2, 'action' => 'foo'])->addRoute('/amodule/:controller/foo', ['module' => 'correct', 'controller' => 1, 'action' => 'correct']); $route = $this->router->getRoute($request); $routeExpected = ['namespace' => 'Janeiro\\Module', 'module' => 'correct', 'controller' => 'correct', 'action' => 'correct', 'parameters' => [], 'methods' => null]; $this->assertEquals($routeExpected, $route); }
/** * @param string $name service identifier * @param \Janeiro\Di\Container $container */ public function register($name, Container $container) { $container->set($name, function () use($container, $name) { $service = new Router(); $service->setNamespace($container['registry']->get('routing.namespace')); $service->setRoute(['module' => $container['registry']->get('routing.default.module'), 'controller' => $container['registry']->get('routing.default.controller'), 'action' => $container['registry']->get('routing.default.action')]); foreach ($container['registry']->get('routing.table') as $route) { foreach ($route as $pattern => $configuration) { $service->addRoute($pattern, $configuration); } } return $service; }); }
public function setup() { $container = new Container(); $container->set('view', function () use($container) { $view = new View($container); $view->registerEngine('Janeiro\\Mvc\\View\\Standard', '.php'); return $view; }, true)->set('router', function () use($container) { $router = new Router($container); $router->addRoute('/:module/:controller', ['module' => 1, 'controller' => 2, 'action' => 'index']); $router->addRoute('/:module/:controller/:action', ['module' => 1, 'controller' => 2, 'action' => 3]); $router->addRoute('/test/parameter/variable/:integer', ['module' => 'test', 'controller' => 'parameter', 'parameters' => ['variable' => 1]]); return $router; }, true); $this->dispatcher = new Dispatcher($container); $this->container = $container; }
/** * Apply routing table and start dispatch forwarding loop * * @param \Janeiro\Request\AbstractRequest $request * @return \Janeiro\Response */ public function dispatch(AbstractRequest $request) { try { $this->route = $this->router->getRoute($request); $this->response = $this->loop($request); } catch (\Exception $e) { $this->response->setException($e); } return $this->response; }