Ich möchte ein anderes Layout für die Seite Seite 404 nicht finden. Wie kann ich ein anderes Layout für diese Seite festlegen?CakePHP - wie man Fehlerseiten hat seine eigenen Layouts?
Antwort
Savant vom IRC hat mir geholfen, und er sich mit der beforeRender(){}
im app_controller vorschlagen
// Before Render
function beforeRender() {
if($this->name == 'CakeError') {
//$this->layout = 'error';
}
}
CakeError ein catchAll für Fehler ist: D
Diese einfachste Weise, die ich kenne, ist diese Funktion in Ihrem AppController
zu erstellen:
function appError($method, $messages)
{
}
Anschließend können Sie, was Sie mit dem Fehler wollen tun, zeigen Sie es wie Sie wollen, oder es gar nicht angezeigt, sende eine E-Mail usw. (Ich bin mir nicht sicher, ob diese Methode noch gültig ist.)
Es gibt auch eine Option zum Erstellen app_error.php
in Ihrer App root, mit class AppError extends ErrorHandler
darin, die Sie alle Arten von überschreiben können Fehler. Aber ich habe das noch nicht gemacht, also kann ich dir nicht mehr darüber erzählen.
Weitere Informationen finden Sie unter cake/libs/error.php und cake/libs/object.php und natürlich The Book.
Bearbeiten: Vergessen zu erwähnen, wenn Sie den Fehler erfasst haben, gibt es nichts, was Sie daran hindert, beispielsweise den Fehler in der Sitzung zu speichern, zu Ihrem "Fehlerbehandlungscontroller" umzuleiten und ihn dann in Ihrem Controller anzuzeigen Sie wollen.
vielen Dank: D –
besser eine error.php Datei in Ihrer Anwendung zu erstellen
Ordnerclass AppError extends ErrorHandler {
function error404($params) {
$this->controller->layout = 'error';
parent::error404($params);
}
}
so können Sie die if-Tests auf jeder Seite vermeiden machen, dass Savants' Lösung führt
In 2.2.2 CakePHP änderte ich den ExceptionRenderer in core.php mit meinem eigenen, wie folgt aus:
app/Config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer', // this is ExceptionRenderer by default
'log' => true
));
app/Lib/Error/MyExceptionRenderer. php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->layout = 'error';
parent::_outputMessage($template);
}
}
Kann nicht genug hoch, schlägt meinen alten Ansatz des Duplizierens jeder Fehleransicht und das Festlegen des Layouts auf "Fehler" an der Spitze. – Matthew
Meine Lösung für CakePHP 2,3
Änderung t Der ExceptionRenderer in der core.php verwendet einen eigenen Renderer.
app/Config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer',
'log' => true
));
app/Lib/Error/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 besteht darin, dass es keine Ausnahmen von AppController geworfen wird sichergestellt, verursachen keine Endlosschleife beim Rendern der Ausnahme. Erzwingt jedes Mal ein grundlegendes Rendering der Ausnahmebedingungsnachricht.
Sie müssen nur Layoutänderungen in Ihrer error400.ctp Datei unter/app/View/Errors/error400 vornehmen.ctp
öffnen, die Datei und legen Sie das Layout von
<?php $this->layout=''; //set your layout here ?>
- 1. Wie bearbeite ich nur ihre eigenen Daten in CakePHP 2?
- 2. Webmethoden - Kann es seine eigenen Webdienste hosten?
- 3. Bibliothek kann nicht seine eigenen Header sehen
- 4. Wie man andere Layouts anzeigt
- 5. Android: Wie man Layouts versteht?
- 6. Chrome hat seine Konsole verloren?
- 7. Lokalisierte Fehlerseiten in Symfony2
- 8. Wie implementiert man Captcha in CakePHP 2.0?
- 9. Wie benutzt man Layouts in Aurelia?
- 10. coderigniter Fehlerseiten
- 11. Numpy, das Array hat keine eigenen Daten?
- 12. Wie man Memcache in CakePHP implementieren?
- 13. cakephp - hat viele durch nicht
- 14. Wie implementiert man dynamische 404, 500 usw. Fehlerseiten in Rails?
- 15. Wie man mehrere Fehlerseiten für verschiedene Ausnahmen im Frühjahr behandelt
- 16. Hat NHaml eine content_for-Fähigkeit für Layouts?
- 17. Wie vergleicht man die Effizienz verschiedener Layouts?
- 18. Wie man Layouts in yii2 ändert
- 19. Wie man Standard-Layouts mit StringTemplate macht?
- 20. Git: Zweig hat seine Geschichte verloren?
- 21. Hat jeder Thread seinen eigenen Stack?
- 22. Rohr stdout einen interaktiven Skript seine eigenen stdin
- 23. Sharepoint Branding von Fehlerseiten
- 24. Verbindungstabellen CakePHP gehört zu, hat viele
- 25. CakePHP Validierung Fehlermeldungen - wie man sie weitergeben?
- 26. Wie man seinen eigenen .net Obfuscator schreibt
- 27. Wie man einen eigenen Geokodierungsserver einrichtet
- 28. 500 Benutzerdefinierte Fehlerseiten
- 29. Wie bekommt man seine Vertriebsgruppe von Lync
- 30. Französisch IIS7 Benutzerdefinierte Fehlerseiten Sprache
Diese Methode ist nicht mehr gültig mit CakePHP 2.x. Und ich habe keine Ahnung, wie es jetzt geht ... lol –
Ich kann bestätigen, dass diese Methode mit Cake 2.2.1 funktioniert. – bancer
Ich bestätige nicht in Kuchen 2.2.1. Ich debugge $ this-> Layout in BeforeRender, ich bekomme das erwartete 'public_layout', aber es wird immer noch in default.ctp gerendert. DEBUG ist auf 0 gesetzt. –