If no request or response are provided, the method will use
ServerRequestFactory::fromGlobals to create a request instance, and
instantiate a default response instance.
It then will invoke itself with the request and response, and emit
the returned response using the composed emitter.
public run ( Psr\Http\Message\ServerRequestInterface $request = null, Psr\Http\Message\ResponseInterface $response = null ) | ||
$request | Psr\Http\Message\ServerRequestInterface | |
$response | Psr\Http\Message\ResponseInterface |
/** * @param Request $request * * @return Response * @throws \Exception */ public function doRequest($request) { $inputStream = fopen('php://memory', 'r+'); $content = $request->getContent(); if ($content !== null) { fwrite($inputStream, $content); rewind($inputStream); } $queryParams = []; $postParams = []; $queryString = parse_url($request->getUri(), PHP_URL_QUERY); if ($queryString != '') { parse_str($queryString, $queryParams); } if ($request->getMethod() !== 'GET') { $postParams = $request->getParameters(); } $serverParams = $request->getServer(); if (!isset($serverParams['SCRIPT_NAME'])) { //required by WhoopsErrorHandler $serverParams['SCRIPT_NAME'] = 'Codeception'; } $zendRequest = new ServerRequest($serverParams, $this->convertFiles($request->getFiles()), $request->getUri(), $request->getMethod(), $inputStream, $this->extractHeaders($request)); $zendRequest = $zendRequest->withCookieParams($request->getCookies())->withQueryParams($queryParams)->withParsedBody($postParams); $cwd = getcwd(); chdir(codecept_root_dir()); $this->application->run($zendRequest); chdir($cwd); $this->request = $zendRequest; $response = $this->responseCollector->getResponse(); $this->responseCollector->clearResponse(); return new Response($response->getBody(), $response->getStatusCode(), $response->getHeaders()); }
public function testInjectedFinalHandlerCanEmitA404WhenNoMiddlewareMatches() { $finalHandler = new TemplatedErrorHandler(); $app = new Application(new FastRouteRouter(), null, $finalHandler, $this->getEmitter()); $request = new ServerRequest([], [], 'https://example.com/foo', 'GET'); $response = new Response(); $app->run($request, $response); $this->assertInstanceOf(ResponseInterface::class, $this->response); $this->assertEquals(404, $this->response->getStatusCode()); }
public function testComposedEmitterIsCalledByRun() { $routeResult = RouteResult::fromRouteFailure(); $this->router->match()->willReturn($routeResult); $finalResponse = $this->prophesize('Psr\\Http\\Message\\ResponseInterface')->reveal(); $finalHandler = function ($req, $res, $err = null) use($finalResponse) { return $finalResponse; }; $emitter = $this->prophesize('Zend\\Diactoros\\Response\\EmitterInterface'); $emitter->emit(Argument::type('Psr\\Http\\Message\\ResponseInterface'))->shouldBeCalled(); $app = new Application($this->router->reveal(), null, $finalHandler, $emitter->reveal()); $request = new Request([], [], 'http://example.com/'); $response = $this->prophesize('Psr\\Http\\Message\\ResponseInterface'); $app->run($request, $response->reveal()); }