From 872dc79dbd8b04424520e32675a6e0dcb6ed44bc Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Wed, 25 May 2016 21:28:33 -0400 Subject: Do not execute controller if the response is already sent --- app/Core/Controller/Runner.php | 5 ++++- app/Core/Http/Response.php | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'app/Core') diff --git a/app/Core/Controller/Runner.php b/app/Core/Controller/Runner.php index b973c098..8353cf69 100644 --- a/app/Core/Controller/Runner.php +++ b/app/Core/Controller/Runner.php @@ -26,7 +26,10 @@ class Runner extends Base { try { $this->executeMiddleware(); - $this->executeController(); + + if (!$this->response->isResponseAlreadySent()) { + $this->executeController(); + } } catch (PageNotFoundException $e) { $controllerObject = new AppController($this->container); $controllerObject->notFound($e->hasLayout()); diff --git a/app/Core/Http/Response.php b/app/Core/Http/Response.php index 1c5310d0..0f16fb65 100644 --- a/app/Core/Http/Response.php +++ b/app/Core/Http/Response.php @@ -16,6 +16,18 @@ class Response extends Base private $httpStatusCode = 200; private $httpHeaders = array(); private $httpBody = ''; + private $responseSent = false; + + /** + * Return true if the response have been sent to the user agent + * + * @access public + * @return bool + */ + public function isResponseAlreadySent() + { + return $this->responseSent; + } /** * Set HTTP status code @@ -187,6 +199,8 @@ class Response extends Base */ public function send() { + $this->responseSent = true; + if ($this->httpStatusCode !== 200) { header('Status: '.$this->httpStatusCode); header($this->request->getServerVariable('SERVER_PROTOCOL').' '.$this->httpStatusCode); -- cgit v1.2.3