Do not execute controller if the response is already sent
This commit is contained in:
parent
74a84a28e3
commit
872dc79dbd
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class BootstrapMiddleware extends BaseMiddleware
|
|||
$this->response->withContentSecurityPolicy($this->container['cspRules']);
|
||||
$this->response->withSecurityHeaders();
|
||||
|
||||
if (ENABLE_XFRAME && $this->router->getAction() !== 'readonly') {
|
||||
if (ENABLE_XFRAME) {
|
||||
$this->response->withXframe();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue