ソースを参照

Add SerializedView.

It contains common code used by view which return serialized data.
ADmad 11 年 前
コミット
32c1712115
2 ファイル変更101 行追加44 行削除
  1. 9 44
      src/View/JsonView.php
  2. 92 0
      src/View/SerializedView.php

+ 9 - 44
src/View/JsonView.php

@@ -18,6 +18,7 @@ use Cake\Core\Configure;
 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.
@@ -56,7 +57,7 @@ use Cake\Network\Response;
  * string to specify custom query string parameter name which will contain the
  * callback function name.
  */
-class JsonView extends View
+class JsonView extends SerializedView
 {
 
     /**
@@ -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.
@@ -133,17 +108,7 @@ class JsonView extends View
      */
     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'];

+ 92 - 0
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);
+        }
+    }
+}