Move response common functions to ResponseMaker trait

This commit is contained in:
Samuel Georges 2019-11-02 18:21:22 +11:00
parent f269901d72
commit ff8f899fbe
3 changed files with 87 additions and 74 deletions

View File

@ -36,6 +36,7 @@ class Controller extends Extendable
use \System\Traits\AssetMaker;
use \System\Traits\ConfigMaker;
use \System\Traits\EventEmitter;
use \System\Traits\ResponseMaker;
use \System\Traits\SecurityController;
use \Backend\Traits\ErrorMaker;
use \Backend\Traits\WidgetMaker;
@ -108,16 +109,6 @@ class Controller extends Extendable
*/
protected $guarded = [];
/**
* @var int Response status code
*/
protected $statusCode = 200;
/**
* @var mixed Override the standard controller response.
*/
protected $responseOverride = null;
/**
* Constructor.
*/
@ -177,6 +168,7 @@ class Controller extends Extendable
/*
* Check security token.
* @see \System\Traits\SecurityController
*/
if (!$this->verifyCsrfToken()) {
return Response::make(Lang::get('system::lang.page.invalid_token.label'), 403);
@ -184,6 +176,7 @@ class Controller extends Extendable
/*
* Check forced HTTPS protocol.
* @see \System\Traits\SecurityController
*/
if (!$this->verifyForceSecure()) {
return Redirect::secure(Request::path());
@ -251,15 +244,11 @@ class Controller extends Extendable
*/
$result = $this->execPageAction($action, $params);
if ($this->responseOverride !== null) {
$result = $this->responseOverride;
}
if (!is_string($result)) {
return $result;
}
return Response::make($result, $this->statusCode);
/*
* Prepare and return response
* @see \System\Traits\ResponseMaker
*/
return $this->makeResponse($result);
}
/**
@ -649,27 +638,6 @@ class Controller extends Extendable
return $id;
}
/**
* Sets the status code for the current web response.
* @param int $code Status code
*/
public function setStatusCode($code)
{
$this->statusCode = (int) $code;
return $this;
}
/**
* Sets the response for the current page request cycle, this value takes priority
* over the standard response prepared by the controller.
* @param mixed $response Response object or string
*/
public function setResponse($response)
{
$this->responseOverride = $response;
return $this;
}
//
// Hints
//

View File

@ -39,6 +39,7 @@ class Controller
{
use \System\Traits\AssetMaker;
use \System\Traits\EventEmitter;
use \System\Traits\ResponseMaker;
use \System\Traits\SecurityController;
/**
@ -91,11 +92,6 @@ class Controller
*/
public $vars = [];
/**
* @var int Response status code
*/
protected $statusCode = 200;
/**
* @var self Cache of self
*/
@ -174,6 +170,7 @@ class Controller
/*
* Check security token.
* @see \System\Traits\SecurityController
*/
if (!$this->verifyCsrfToken()) {
return Response::make(Lang::get('system::lang.page.invalid_token.label'), 403);
@ -284,11 +281,11 @@ class Controller
return $event;
}
if (!is_string($result)) {
return $result;
}
return Response::make($result, $this->statusCode);
/*
* Prepare and return response
* @see \System\Traits\ResponseMaker
*/
return $this->makeResponse($result);
}
/**
@ -1251,34 +1248,10 @@ class Controller
return $result;
}
//
// Setters
//
/**
* Sets the status code for the current web response.
* @param int $code Status code
* @return self
*/
public function setStatusCode($code)
{
$this->statusCode = (int) $code;
return $this;
}
//
// Getters
//
/**
* Returns the status code for the current web response.
* @return int Status code
*/
public function getStatusCode()
{
return $this->statusCode;
}
/**
* Returns an existing instance of the controller.
* If the controller doesn't exists, returns null.

View File

@ -0,0 +1,72 @@
<?php namespace System\Traits;
use Response;
/**
* Response Maker Trait
* Stores attributes the can be used to prepare a response from the server.
*
* @package october\system
* @author Alexey Bobkov, Samuel Georges
*/
trait ResponseMaker
{
/**
* @var int Response status code
*/
protected $statusCode = 200;
/**
* @var mixed Override the standard controller response.
*/
protected $responseOverride = null;
/**
* Sets the status code for the current web response.
* @param int $code Status code
* @return self
*/
public function setStatusCode($code)
{
$this->statusCode = (int) $code;
return $this;
}
/**
* Returns the status code for the current web response.
* @return int Status code
*/
public function getStatusCode()
{
return $this->statusCode;
}
/**
* Sets the response for the current page request cycle, this value takes priority
* over the standard response prepared by the controller.
* @param mixed $response Response object or string
*/
public function setResponse($response)
{
$this->responseOverride = $response;
return $this;
}
/**
* Prepares a response that considers overrides and custom responses.
* @param mixed $contents
* @return mixed
*/
public function makeResponse($contents)
{
if ($this->responseOverride !== null) {
$contents = $this->responseOverride;
}
if (!is_string($contents)) {
return $contents;
}
return Response::make($contents, $this->statusCode);
}
}