run() public method

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
Ejemplo n.º 1
0
 /**
  * @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());
 }
Ejemplo n.º 2
0
 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());
 }
Ejemplo n.º 3
0
 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());
 }