diff --git a/src/Application/ErrorPresenter.php b/src/Application/ErrorPresenter.php index a19d204e3..9553cce49 100644 --- a/src/Application/ErrorPresenter.php +++ b/src/Application/ErrorPresenter.php @@ -41,9 +41,9 @@ public function run(Application\Request $request) $this->logger->log($e, ILogger::EXCEPTION); } } - ob_start(); - require __DIR__ . '/templates/error.phtml'; - return new Application\Responses\TextResponse(ob_get_clean()); + return new Application\Responses\CallbackResponse(function () use ($code) { + require __DIR__ . '/templates/error.phtml'; + }); } } diff --git a/src/Application/IRouteList.php b/src/Application/IRouteList.php new file mode 100644 index 000000000..e7a771aa9 --- /dev/null +++ b/src/Application/IRouteList.php @@ -0,0 +1,23 @@ +callback = $callback; + } + + + /** + * Sends response to output. + * @return void + */ + public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse) + { + call_user_func($this->callback, $httpRequest, $httpResponse); + } + +} diff --git a/src/Application/Routers/RouteList.php b/src/Application/Routers/RouteList.php index 912c65058..55f1d6f82 100644 --- a/src/Application/Routers/RouteList.php +++ b/src/Application/Routers/RouteList.php @@ -13,7 +13,7 @@ /** * The router broker. */ -class RouteList extends Nette\Utils\ArrayList implements Nette\Application\IRouter +class RouteList extends Nette\Utils\ArrayList implements Nette\Application\IRouter, Nette\Application\IRouteList { /** @var array */ private $cachedRoutes; diff --git a/src/Bridges/ApplicationTracy/RoutingPanel.php b/src/Bridges/ApplicationTracy/RoutingPanel.php index 83468ef5a..9753ea564 100644 --- a/src/Bridges/ApplicationTracy/RoutingPanel.php +++ b/src/Bridges/ApplicationTracy/RoutingPanel.php @@ -96,7 +96,7 @@ public function getPanel() */ private function analyse($router, $module = '') { - if ($router instanceof Routers\RouteList) { + if ($router instanceof Nette\Application\IRouteList) { foreach ($router as $subRouter) { $this->analyse($subRouter, $module . $router->getModule()); } diff --git a/tests/Application/CallbackResponse.phpt b/tests/Application/CallbackResponse.phpt new file mode 100644 index 000000000..83ac423f8 --- /dev/null +++ b/tests/Application/CallbackResponse.phpt @@ -0,0 +1,21 @@ +send(new Http\Request(new Http\UrlScript), new Http\Response); + Assert::true($ok); +});