public function testMatchSameAsInternalRoute() { $request = new ezcMvcRequest(); $request->uri = '/foo'; $internalRoute = new ezcMvcRailsRoute('/foo', 'testDummyController', 'testDummyAction'); $versionRoute = new ezpRestVersionedRoute($internalRoute, 1); $internalRouteInfo = $internalRoute->matches($request); $versionRouteInfo = $versionRoute->matches($request); self::assertSame('/foo', $internalRouteInfo->matchedRoute); self::assertSame('/foo', $versionRouteInfo->matchedRoute); self::assertSame('testDummyController', $internalRouteInfo->controllerClass); self::assertSame('testDummyController', $versionRouteInfo->controllerClass); self::assertSame('testDummyAction', $internalRouteInfo->action); self::assertSame('testDummyAction', $versionRouteInfo->action); }
/** * Evaluates the URI against this route and protocol. * * @param ezcMvcRequest $request * @return ezcMvcRoutingInformation|null */ public function matches( ezcMvcRequest $request ) { if ( $this->protocol === null || $request->protocol === $this->protocol ) return parent::matches( $request ); return null; }
/** * Constructs a new ezpMvcRailsRoute with $pattern for protocols used as * keys in $protocolActionMap * * Examples: * <code> * $route = new ezpMvcRailsRoute( * '/content/node/:nodeId', * 'ezpRestContentController' * array( * 'http-get' => 'viewContent', * 'http-delete' => 'deleteContent' * ) * ); * </code> * * will define the route /content/node/:nodeId and a different method in * the controller will be called depending on the used HTTP verb. If * $protocolActionMap is a string, we assume the mapping is done for * http-get unless another protocol is indicated in deprecated param $protocol * (kept to not introduce a BC break) * * @param string $pattern * @param string $controllerClassName * @param array|string $protocolActionMap * @param array $defaultValues * @param null|string $protocol (deprecated) Match specific protocol if * $protocolActionMap is a string, eg: 'http-get'; */ public function __construct($pattern, $controllerClassName, $protocolActionMap, array $defaultValues = array(), $protocol = null) { if (is_string($protocolActionMap)) { if ($protocol === null) { $protocolActionMap = array('http-get' => $protocolActionMap); } else { // compatibility with 4.6 route definition $protocolActionMap = array($protocol => $protocolActionMap); } } if (!isset($protocolActionMap['http-options'])) { $protocolActionMap['http-options'] = 'httpOptions'; } $this->protocolActionMap = $protocolActionMap; parent::__construct($pattern, $controllerClassName, '', $defaultValues); }
public function testsMatchComplex() { $route = new ezcMvcRailsRoute('people/:slug', 'testController', 'action', array('nr' => '', 'name' => '')); $request = new ezcMvcRequest(); $request->uri = 'people/hawking'; $routeInfo = $route->matches($request); self::assertSame('testController', $routeInfo->controllerClass); self::assertEquals(array('nr' => '', 'name' => '', 'slug' => 'hawking'), $request->variables); $request->uri = 'people/42'; $routeInfo = $route->matches($request); self::assertSame('testController', $routeInfo->controllerClass); self::assertEquals(array('nr' => '', 'name' => '', 'slug' => 42), $request->variables); $request->uri = 'people'; $routeInfo = $route->matches($request); self::assertEquals(null, $routeInfo); $request->uri = 'people/'; $routeInfo = $route->matches($request); self::assertEquals(null, $routeInfo); }
public function testMatchWithDotInUrl3a() { $request = new ezcMvcRequest(); $request->uri = '/topic/list/foo.bar.ezc.is.cool'; $route = new ezcMvcRailsRoute('/topic/list/:newsgroup_name', 'testController'); $routeInfo = $route->matches($request); self::assertSame('/topic/list/:newsgroup_name', $routeInfo->matchedRoute); self::assertSame('testController', $routeInfo->controllerClass); self::assertSame(array('newsgroup_name' => 'foo.bar.ezc.is.cool'), $request->variables); }