private function map(array $config) { foreach ($config as $val) { list($path, $controller) = $val; $route = $this->router->map($path, $controller); if (isset($val['via'])) { $route->via($val['via']); } else { $route->via('GET'); } if (isset($val['name'])) { $route->name($val['name']); } if (isset($val['assert'])) { if (!is_array($val['assert'])) { $route->assert($val['assert']); } else { foreach ($val['assert'] as $k => $cond) { if (is_int($k)) { $route->assert($cond); continue; } $route->assert($k, $cond); } } } } }
/** * Variables passed to controllers are detected from both Type hint and var name. * * |Passed variable |Type hint |Variable name | * |--------------------|----------|---------------------------------| * |Current request. |Request |$req, $request | * |Caused exception. |\Exception|$e, $ex, $exception, $err, $error| * |Binding router. |Router |$router | * |Params in URL. |none. |$matches | * |Each request params.|none. |Param name. | */ public function testControllerArgs() { $test = $this; $r = new Router(); $r->map('/args', function ($req, $request, Request $q, $router, Router $r) use($test) { $test->assertInstanceOf('Ranyuen\\Little\\Request', $req); $test->assertInstanceOf('Ranyuen\\Little\\Request', $request); $test->assertInstanceOf('Ranyuen\\Little\\Request', $q); $test->assertInstanceOf('Ranyuen\\Little\\Router', $router); $test->assertInstanceOf('Ranyuen\\Little\\Router', $r); $test->assertEquals('mOmonga', $req->get('name')); $test->assertEquals('mOmonga', $request->get('name')); $test->assertEquals('mOmonga', $q->get('name')); return new Response('args'); })->via('GET', 'POST'); $req = Request::create('/args?name=mOmonga'); $res = $r->run($req); $this->assertEquals(200, $res->getStatusCode()); $this->assertEquals('args', $res->getContent()); $req = Request::create('/args', 'POST', ['name' => 'mOmonga']); $res = $r->run($req); $this->assertEquals(200, $res->getStatusCode()); $this->assertEquals('args', $res->getContent()); }