Wie fange ich eine HTTP_Exception_404 Fehler in Kohana
Ich habe versucht, Folgen den Anweisungen hier: http://kohanaframework.org/3.0/guide/kohana/tutorials/error-pages Aber aus irgendeinem Grund bin ich nicht in der Lage zu fangen die HTTP_Exception_404 bekomme ich noch einen hässlichen Fehler-Seite und nicht meine eigene Seite.
Auch geben, wenn ich in die URL-Fehler/404/Nachricht, bekomme ich eine hässliche Kohana HTTP 404-Fehlermeldung.
Hier ist die Dateien-Struktur:
- Module
- meine
- init.php
- Klassen
- controller
- error_handler.php
- http_response_exception.php
- kohana.php
- controller
- Ansichten
- error.php
- meine
Code:
init.php:
<?php defined('SYSPATH') or die('No direct access');
Route::set('error', 'error/<action>(/<message>)', array('action' => '[0-9]++', 'message' => '.+'))
->defaults(array(
'controller' => 'error_handler'
));
http_response_exception.php:
<?php defined('SYSPATH') or die('No direct access');
class HTTP_Response_Exception extends Kohana_Exception {
public static function exception_handler(Exception $e)
{
if (Kohana::DEVELOPMENT === Kohana::$environment)
{
Kohana_Core::exception_handler($e);
}
else
{
Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));
$attributes = array
(
'action' => 500,
'message' => rawurlencode($e->getMessage()),
);
if ($e instanceof HTTP_Response_Exception)
{
$attributes['action'] = $e->getCode();
}
//Error sub-request.
echo Request::factory(Route::url('error', $attributes))
->execute()
->send_headers()
->response;
}
}
}
kohana.php:
<?php defined('SYSPATH') or die('No direct script access.');
class Kohana extends Kohana_Core
{
/**
* Redirect to custom exception_handler
*/
public static function exception_handler(Exception $e)
{
Error::exception_handler($e);
}
} //End of Kohana
error_handler.php:
<?php defined('SYSPATH') or die('No direct access');
class Controller_Error_handler extends Controller {
public function before()
{
parent::before();
$this->template = View::factory('template/useradmin');
$this->template->content = View::factory('error');
$this->template->page = URL::site(rawurldecode(Request::$instance->uri));
//Internal request only!
if (Request::$instance !== Request::$current)
{
if ($message = rawurldecode($this->request->param('message')))
{
$this->template->message = $message;
}
}
else
{
$this->request->action = 404;
}
}
public function action_404()
{
$this->template->title = '404 Not Found';
//Here we check to see if a 404 came from our website. This allows the
//webmaster to find broken links and update them in a shorter amount of time.
if (isset ($_SERVER['HTTP_REFERER']) AND strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== FALSE)
{
//Set a local flag so we can display different messages in our template.
$this->template->local = TRUE;
}
//HTTP Status code.
$this->request->status = 404;
}
public function action_503()
{
$this->template->title = 'Maintenance Mode';
$this->request->status = 503;
}
public function action_500()
{
$this->template->title = 'Internal Server Error';
$this->request->status = 500;
}
} //End of Error_handler
Kann ich wirklich nicht sehen, wo ich falsch gemacht habe. Vielen Dank im Voraus für jede Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst von all, Sie müssen sicherstellen, dass Sie sind, laden Sie Ihr Modul, indem Sie ihn in der modules-Sektion Ihrer application/bootstrap.php Datei wie so
Die Tatsache, dass Sie erwähnt, die direkt auf die url für den error handler controller löst einen 404 Fehler macht, ich glaube dein Modul ist nicht geladen worden.
Ich würde auch vorschlagen, ein paar mehr änderungen.
http_response_exception.php nicht verlängern müssen Kohana_Exception, da diese Klasse ist nicht eine Ausnahme, aber eine Ausnahme-handler. Entlang diesen gleichen Linien, eine geeignete Klasse name könnte Exception_Handler, da die Klasse repräsentieren nicht eine Ausnahme, aber Sie Sie behandeln. Zweitens, weil, wie haben Sie den Namen dieser Datei, es sollte sich in der modules/my/classes/http/response/exception.php. Andere als, dass der code für diese Klasse ok aussieht.
Ähnlich, weil, wie Sie benannt haben Ihren controller, Sie sollte sich und nannte ein bisschen anders. Verschieben Sie es an modules/my/classes/controller/error/handler.php
Denken Sie daran, dass Unterstriche in Klassennamen bedeutet ein neues Verzeichnis, wie pro http://kohanaframework.org/3.2/guide/kohana/conventions
Schließlich, ich glaube nicht, dass Sie wirklich brauchen, um erweitern die Kohana_Core Klasse hier, sondern registrieren Sie sich einfach Ihre eigenen benutzerdefinierten exception-handler. Registrieren Sie Ihre eigene exception-handler in der Anwendung der bootstrap-Datei, oder in der Modul-Datei init mit der folgenden generischen code:
Hier ist ein Kunde-Ausnahme-handler, die ich verwenden, das ist ziemlich ähnlich zu verkaufen:
Sie verwenden eine veraltete Dokumentation. HTTP_Exception_404 gebündelt wurde in 3.1, und Sie versuchen, zu implementieren, die eine Lösung von 3.0.
Sehen Dokumentation für Ihre version von Kohana für eine Lösung, die funktioniert.
Alles, was Sie tun müssen, ist, legen Sie den Pfad zu einem anderen Blick in Ihre bootstrap.php hinzufügen:
analysieren alle der Variablen, die derzeit analysiert, um die Fehler-Seite, die lebt in:
ie:
Nach einem SEHR LANGE ZEIT der Suche fand ich endlich eine Lösung für mein kleines problem.
Hier ist eine Schritt-für-Schritt-Anleitung laden Sie Ihre eigenen benutzerdefinierten Fehlerseiten mit Kohana 3.2:
Hier haben Sie mehrere Möglichkeiten:
ein. Tun, was Sie sagen, in der Dokumentation der bootstrap.php:
b. Oder fügen Sie einfach diese zwei Zeilen, die ohne "wenn":
c. Ich habe nicht versucht, aber in der neuen bootstrap.php Sie haben diesen code:
Ich nehme an, Sie konnte nur geben Sie den Wert "Produktion" zu "$_SERVER['KOHANA_ENV']" vor den Zeilen.
Wieder, wie ich schon sagte, ich habe es nicht ausprobiert, aber es sollte funktionieren.
Ich persönlich nur auskommentiert, die Zeilen von codes.
2 Nun müssen Sie noch ein paar Konfigurationen in einer "ini.php" Datei " oder in der "bootstra.php" Datei.
Dies ist, was fehlte, und machte es zu schwer. Für den rest kann man einfach nur Folgen Kohana3.2 Dokumentation, oder Sie können das Modul, das ich Hinzugefügt, um ein repo bei GitHub: https://github.com/jnbdz/Kohana-error
Jeder Unterstrich wird ein directory-separator in einem Klasse Namen. Also bei der Benennung Ihrer Klasse
Http_Response_Exception
sollte die Klasse inclasses/http/response/exception.php
. Sonst wird die Klasse nicht gefunden werden, indem man die autoloader von Kohana.Bearbeiten
Hmm, scheint, wie die Dokumentation falsch ist, in diesem Aspekt.
classes/http_response_exception.php
macht keinen Sinn.Kohana::DEVELOPMENT === Kohana::$environment
zuKohana::DEVELOPMENT !== Kohana::$environment
zeigen die benutzerdefinierte Fehlerseite?