Skip to content

Commit

Permalink
Add SerializedView.
Browse files Browse the repository at this point in the history
It contains common code used by view which return serialized data.
  • Loading branch information
ADmad committed May 8, 2015
1 parent e615ef8 commit 32c1712
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 44 deletions.
53 changes: 9 additions & 44 deletions src/View/JsonView.php
Expand Up @@ -18,6 +18,7 @@
use Cake\Event\EventManager;
use Cake\Network\Request;
use Cake\Network\Response;
use Cake\View\SerializedView;

/**
* A view class that is used for JSON responses.
Expand Down Expand Up @@ -56,7 +57,7 @@
* string to specify custom query string parameter name which will contain the
* callback function name.
*/
class JsonView extends View
class JsonView extends SerializedView
{

/**
Expand All @@ -74,44 +75,18 @@ class JsonView extends View
public $subDir = 'json';

/**
* List of special view vars.
*
* @var array
*/
protected $_specialVars = ['_serialize', '_jsonOptions', '_jsonp'];

/**
* Constructor
* Response type.
*
* @param \Cake\Network\Request $request Request instance.
* @param \Cake\Network\Response $response Response instance.
* @param \Cake\Event\EventManager $eventManager EventManager instance.
* @param array $viewOptions An array of view options
* @var string
*/
public function __construct(
Request $request = null,
Response $response = null,
EventManager $eventManager = null,
array $viewOptions = []
) {
parent::__construct($request, $response, $eventManager, $viewOptions);

if ($response && $response instanceof Response) {
$response->type('json');
}
}
public $_responseType = 'json';

/**
* Load helpers only if serialization is disabled.
* List of special view vars.
*
* @return void
* @var array
*/
public function loadHelpers()
{
if (empty($this->viewVars['_serialize'])) {
parent::loadHelpers();
}
}
protected $_specialVars = ['_serialize', '_jsonOptions', '_jsonp'];

/**
* Render a JSON view.
Expand All @@ -133,17 +108,7 @@ public function loadHelpers()
*/
public function render($view = null, $layout = null)
{
$serialize = false;
if (isset($this->viewVars['_serialize'])) {
$serialize = $this->viewVars['_serialize'];
}

$return = null;
if ($serialize !== false) {
$return = $this->_serialize($serialize);
} elseif ($view !== false && $this->_getViewFileName($view)) {
$return = parent::render($view, false);
}
$return = parent::render($view, $layout);

if (!empty($this->viewVars['_jsonp'])) {
$jsonpParam = $this->viewVars['_jsonp'];
Expand Down
92 changes: 92 additions & 0 deletions src/View/SerializedView.php
@@ -0,0 +1,92 @@
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 3.1.0
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\View;

use Cake\Event\EventManager;
use Cake\Network\Request;
use Cake\Network\Response;

/**
* Parent class for view classes generating serialized outputs like JsonView and XmlView.
*/
class SerializedView extends View
{
/**
* Response type.
*
* @var string
*/
public $_responseType;

/**
* Constructor
*
* @param \Cake\Network\Request $request Request instance.
* @param \Cake\Network\Response $response Response instance.
* @param \Cake\Event\EventManager $eventManager EventManager instance.
* @param array $viewOptions An array of view options
*/
public function __construct(
Request $request = null,
Response $response = null,
EventManager $eventManager = null,
array $viewOptions = []
) {
parent::__construct($request, $response, $eventManager, $viewOptions);

if ($response && $response instanceof Response) {
$response->type($this->_responseType);
}
}

/**
* Load helpers only if serialization is disabled.
*
* @return void
*/
public function loadHelpers()
{
if (empty($this->viewVars['_serialize'])) {
parent::loadHelpers();
}
}

/**
* Render view template or return serialized data.
*
* ### Special parameters
* `_serialize` To convert a set of view variables into a serialized form.
* Its value can be a string for single variable name or array for multiple
* names. If true all view variables will be serialized. It unset normal
* view template will be rendered.
*
* @param string|null $view The view being rendered.
* @param string|null $layout The layout being rendered.
* @return string|null The rendered view.
*/
public function render($view = null, $layout = null)
{
$serialize = false;
if (isset($this->viewVars['_serialize'])) {
$serialize = $this->viewVars['_serialize'];
}

if ($serialize !== false) {
return $this->_serialize($serialize);
} elseif ($view !== false && $this->_getViewFileName($view)) {
return parent::render($view, false);
}
}
}

0 comments on commit 32c1712

Please sign in to comment.