public function testMultiMethodRoute() { $called = false; $router = new Router(); $router->add('GET|PUT', 'something/{a}/{b}/{c}')->onMatch(function ($b, $c, $a, $extra) use(&$called) { $called = true; $this->assertEquals('a', $a); $this->assertEquals('b', $b); $this->assertEquals('c', $c); $this->assertEquals('foo', $extra); })->extras(['extra' => 'foo']); $router->match(new Request('GET', 'something/a/b/c')); $this->assertTrue($called); $called = false; $router->match(new Request('PUT', 'something/a/b/c')); $this->assertTrue($called); }
private function addRoutes($actions, $namedActionName, $unnamedActionName, $actionPathBase) { $unnamedAdded = false; foreach ($actions as $action => $method) { if (in_array($action, $this->unnamedActions)) { $initializer = $this->owner->add($method, $actionPathBase); if (!$unnamedAdded) { $unnamedAdded = true; $initializer->name($unnamedActionName); } } else { $initializer = $this->owner->add($method, $actionPathBase . '/' . $action)->name($action . '_' . $namedActionName); } $initializer->extras(['controller' => $this->controllerName, 'action' => $action]); if ($this->onMatch !== null) { $initializer->onMatch($this->onMatch); } } }