mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Starting content type specific error pages.
- Adding RequestHandler to the error controller. This allows reuse of all of Cake's internals. - Adding a simple JsonView class to do serialized JSON views. - Adding serialize hooks, and wiring things together.
This commit is contained in:
parent
7e790aa6cb
commit
cfbc43671e
4 changed files with 46 additions and 2 deletions
|
@ -42,9 +42,17 @@ class CakeErrorController extends AppController {
|
|||
*/
|
||||
public function __construct($request = null, $response = null) {
|
||||
parent::__construct($request, $response);
|
||||
if (count(Router::extensions())) {
|
||||
$this->components[] = 'RequestHandler';
|
||||
}
|
||||
$this->constructClasses();
|
||||
$this->Components->trigger('initialize', array(&$this));
|
||||
|
||||
$this->_set(array('cacheAction' => false, 'viewPath' => 'Errors'));
|
||||
|
||||
if (isset($this->RequestHandler)) {
|
||||
$this->RequestHandler->startup($this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -556,7 +556,12 @@ class RequestHandlerComponent extends Component {
|
|||
}
|
||||
$controller->ext = '.ctp';
|
||||
|
||||
if (empty($this->_renderType)) {
|
||||
$viewClass = ucfirst($type);
|
||||
App::uses($viewClass . 'View', 'View');
|
||||
|
||||
if (class_exists($viewClass . 'View')) {
|
||||
$controller->viewClass = $viewClass;
|
||||
} elseif (empty($this->_renderType)) {
|
||||
$controller->viewPath .= DS . $type;
|
||||
} else {
|
||||
$remove = preg_replace("/([\/\\\\]{$this->_renderType})$/", DS . $type, $controller->viewPath);
|
||||
|
|
|
@ -181,6 +181,7 @@ class ExceptionRenderer {
|
|||
'url' => h($url),
|
||||
'name' => $error->getMessage(),
|
||||
'error' => $error,
|
||||
'serialize' => array('code', 'error', 'name', 'url')
|
||||
));
|
||||
try {
|
||||
$this->controller->set($error->getAttributes());
|
||||
|
@ -208,7 +209,8 @@ class ExceptionRenderer {
|
|||
$this->controller->set(array(
|
||||
'name' => $message,
|
||||
'url' => h($url),
|
||||
'error' => $error,
|
||||
'error' => $error,
|
||||
'serialize' => array('error', 'name', 'url')
|
||||
));
|
||||
$this->_outputMessage('error400');
|
||||
}
|
||||
|
@ -231,6 +233,7 @@ class ExceptionRenderer {
|
|||
'name' => $message,
|
||||
'message' => h($url),
|
||||
'error' => $error,
|
||||
'serialize' => array('error', 'name', 'url')
|
||||
));
|
||||
$this->_outputMessage('error500');
|
||||
}
|
||||
|
@ -250,6 +253,7 @@ class ExceptionRenderer {
|
|||
'url' => h($url),
|
||||
'name' => $error->getMessage(),
|
||||
'error' => $error,
|
||||
'serialize' => array('code', 'error', 'name', 'url')
|
||||
));
|
||||
try {
|
||||
$this->_outputMessage($this->template);
|
||||
|
|
27
lib/Cake/View/JsonView.php
Normal file
27
lib/Cake/View/JsonView.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
class JsonView extends View {
|
||||
|
||||
/**
|
||||
* Render a JSON view.
|
||||
*
|
||||
* Uses the special 'serialize' parameter to convert a set of
|
||||
* view variables into a JSON response. Makes generating simple
|
||||
* JSON responses very easy. You can omit the 'serialize' parameter,
|
||||
* and use a normal view + layout as well.
|
||||
*
|
||||
* @param string $view The view being rendered.
|
||||
* @param string $layout The layout being rendered.
|
||||
* @return The rendered view.
|
||||
*/
|
||||
public function render($view = null, $layout = null) {
|
||||
if (isset($this->viewVars['serialize'])) {
|
||||
$vars = array_intersect_key(
|
||||
$this->viewVars,
|
||||
array_flip($this->viewVars['serialize'])
|
||||
);
|
||||
return json_encode($vars);
|
||||
}
|
||||
return parent::render($view, $layout);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue