Ich möchte ein anderes Layout für die 404-Seite "Seite nicht gefunden" haben. Wie kann ich ein anderes Layout für diese Seite festlegen?
Antworten
Zu viele Anzeigen?In CakePHP 2.2.2 habe ich den ExceptionRenderer in der core.php durch meinen eigenen ersetzt, etwa so:
app/Config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer', // this is ExceptionRenderer by default
'log' => true
));
app/Lib/Fehler/MyExceptionRenderer.php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->layout = 'error';
parent::_outputMessage($template);
}
}
Erstellen Sie besser eine Datei error.php in Ihrem Anwendungsordner
class AppError extends ErrorHandler {
function error404($params) {
$this->controller->layout = 'error';
parent::error404($params);
}
}
so können Sie die if-Prüfung bei JEDER Seitenwiedergabe vermeiden, die die Lösung von Savants mit sich bringt
Meine Lösung für CakePHP 2.3
Ändern Sie den ExceptionRenderer in core.php, um Ihren eigenen Renderer zu verwenden.
app/Config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer',
'log' => true
));
app/Lib/Fehler/MyExceptionRenderer.php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer
{
/**
* Overrided, to always use a bare controller.
*
* @param Exception $exception The exception to get a controller for.
* @return Controller
*/
protected function _getController($exception) {
if (!$request = Router::getRequest(true)) {
$request = new CakeRequest();
}
$response = new CakeResponse(array('charset' => Configure::read('App.encoding')));
$controller = new Controller($request, $response);
$controller->viewPath = 'Errors';
$controller->layout = 'error';
return $controller;
}
}
Der Vorteil dieses Ansatzes ist, dass er sicherstellt, dass Ausnahmen, die von AppController ausgelöst werden, keine Endlosschleife beim Rendern der Ausnahme verursachen. Erzwingt jedes Mal ein einfaches Rendering der Ausnahmemeldung.
- See previous answers
- Weitere Antworten anzeigen