Ensure $args propagate from Router to Handlers

This commit is contained in:
PJ Dietz 2014-08-02 17:42:16 -04:00
parent 512897effd
commit 75088499b8
2 changed files with 32 additions and 3 deletions

View File

@ -78,10 +78,10 @@ class Router implements HandlerInterface
* *
* Respond with a 404 Not Found if no route provides a response. * Respond with a 404 Not Found if no route provides a response.
*/ */
public function respond() public function respond($args = null)
{ {
$request = Request::getRequest(); $request = Request::getRequest();
$response = $this->getResponse($request); $response = $this->getResponse($request, $args);
if (!$response) { if (!$response) {
$response = $this->getNoRouteResponse($request); $response = $this->getNoRouteResponse($request);
} }

View File

@ -4,7 +4,6 @@ namespace pjdietz\WellRESTed\Test;
use pjdietz\WellRESTed\Interfaces\HandlerInterface; use pjdietz\WellRESTed\Interfaces\HandlerInterface;
use pjdietz\WellRESTed\Interfaces\RequestInterface; use pjdietz\WellRESTed\Interfaces\RequestInterface;
use pjdietz\WellRESTed\Interfaces\ResponseInterface;
use pjdietz\WellRESTed\Response; use pjdietz\WellRESTed\Response;
use pjdietz\WellRESTed\Router; use pjdietz\WellRESTed\Router;
use pjdietz\WellRESTed\Routes\StaticRoute; use pjdietz\WellRESTed\Routes\StaticRoute;
@ -134,6 +133,25 @@ class RouterTest extends \PHPUnit_Framework_TestCase
]; ];
} }
public function testInjection()
{
$mockRequest = $this->getMock('\pjdietz\WellRESTed\Interfaces\RequestInterface');
$mockRequest->expects($this->any())
->method('getPath')
->will($this->returnValue("/2/3"));
$dependencies = [
"add" => function ($a, $b) {
return $a + $b;
}
];
$router = new Router();
$router->addRoute(new TemplateRoute("/{a}/{b}", __NAMESPACE__ . "\\InjectionHandler"));
$resp = $router->getResponse($mockRequest, $dependencies);
$this->assertEquals("5", $resp->getBody());
}
} }
/** /**
@ -184,3 +202,14 @@ class NotFoundHandler implements HandlerInterface
return $response; return $response;
} }
} }
class InjectionHandler implements HandlerInterface
{
public function getResponse(RequestInterface $request, array $args = null)
{
$response = new Response(200);
$body = $args["add"]($args["a"], $args["b"]);
$response->setBody($body);
return $response;
}
}