Frage

Ich habe mit Joomla und ich liebe seine Verwaltungs Anlage die Seite legen für die Wartung. Als ich gesehen habe, alle Anforderungen an den Standort, wenn es in den Wartungsmodus ist auf einer einzigen Seite geleitet. Wenn ich möchte, dass meine eigene „Website für Wartungsarbeiten heruntergefahren“ hinzufügen Modul für eine nicht-Joomla-Website, wie kann ich das tun? Ich bin mit einem MVC-Framework in PHP genannt Kohana in seiner Version 2, die mit Codeigniter ähnlich ist. Ich habe eine Router Klasse, wo ich kontrollieren kann, wo eine bestimmte Adresse gehen. Der einzige Ansatz, den ich denken kann, ist jede Anforderung an einen bestimmten Controller-Funktion leiten, wenn Seite nicht erreichbar ist, aber wie mache ich das? Ich kann nicht möglicherweise manuell neu geroutet alle Urls richtig?

War es hilfreich?

Lösung

Kohana 3 : Sie können eine Catch-all-Route in Ihrem bootstrap.php vor den Kohana::modules() Linien definieren:

if (/* check if site is in under maintenance mode */) {
    Route::set('defaulta', '(<id>)', array('id' => '.*'))
        ->defaults(array(
            'controller' => 'errors',
            'action'     => 'maintenance',
        ));
}

oder Sie können sogar verwirren mit der Bitte, das gleiche zu tun:

if (/* check if site is in under maintenance mode */) {
    echo Request::factory('errors/maintenance')
        ->execute()
        ->send_headers()
        ->response;
}

Kohana 2 : Sie müssten Controller erweitern und die ‚unter Wartung‘ Seitenanzeige im Konstruktor zu behandeln (aber Sie müssen sicherstellen, dass alle Ihre Controller diesen Controller-Klasse erweitern anstelle der Vanille-one):

abstract class Custom_Controller extends Controller {

    public function __construct()
    {
        parent::__construct();
        if (/* check if site is in under maintenance mode */) {
            $page = new View('maintenance');
            $page->render(TRUE);
            exit;
        }
    }
}

Sie können aber auch das Hakensystem nutzen, es zu tun, indem Sie eine Datei in Ihrem hooks Ordner hinzugefügt (stellen Sie sicher, ermöglichen Haken in Ihrem config.php):

Event::add('system.ready', 'check_maintenance_mode');

function check_maintenance_mode() {
    if (/* check if site is in under maintenance mode */) {
        Kohana::config_set('routes', array('_default' => 'errors/maintenance'));
    }
}

Wie Sie sehen können, gibt es tatsächlich viele Möglichkeiten, wie man Sachen in Kohana zu tun, weil es ein sehr flexibles PHP-Framework ist:)

Andere Tipps

Werfen Sie einen Blick auf die Routing- Dokumentation . Sie sollten einen regulären Ausdruck verwenden können, die jede uri zu einer bestimmten Controller / Aktion umleitet. Die einzige Frage, links wäre, wie diese Regel aktivieren / deaktivieren.

Sie können eine Datenbank-Flag in einem gemeinsamen Header überprüfen (vermutlich haben Sie einige gemeinsame umfassen bekam die mit der Datenbank verbindet, etc.), und wenn das Flag gesetzt ist, machen eine bestimmte Seite und Ausgang (achten Sie darauf, alles zu tun die übliche Bereinigung Dinge wie Schließen von Datenbankverbindungen etc.).

Sind Sie mit Apache? Fügen Sie diese auf Ihre .htaccess Datei in Ihrem Web-Root-Verzeichnis (oder auf die vhost Erklärung für die Website) alle Anforderungen an eine „unter Wartung“ Seite umgeleitet werden:

Redirect 301 / /maintenace_page.html

Ich kann von zwei Ideen denken, damit dies geschieht.

  1. Wie Larry sagte, in reguläre Ausdrücke verwenden, um alle Anfragen an einen bestimmten Ort zu umleiten. So, zuerst würden Sie bestimmen, ob die Website im Wartungsmodus war (wahrscheinlich einen Datenbank-Flag oder eine Konfigurationsdatei Einstellung verwenden), dann, wenn es war, verwenden Sie die regulären Ausdruck von Routing der gesamten Datenverkehr zu einem Ort umgeleitet werden.

  2. Sie können überprüfen, ob die Website im Wartungsmodus in den Konstruktor jeder Controller war und leiten je nach Bedarf. Dies ist wahrscheinlich nicht die optimale Lösung, da Sie den gleichen Code für jeden Controller zu wiederholen würden. Also, auch wenn es funktionieren würde, würden Sie wahrscheinlich mit den regulären Ausdrücken besser dran.

Routing in Kohana: http://docs.kohanaphp.com/general/routing

PHP Reguläre Ausdrücke: http: //www.php .net / manual / en / reference.pcre.pattern.syntax.php

Controller in Kohana: http://docs.kohanaphp.com/general/controllers

In index.php eine Konstante definieren IN_MAINTENANCE genannt

Erstellen Sie einen Rückruf wie so in einer Haken Datei :

function in_maintenance()
{
    if(IN_MAINTENANCE)
    {
         Router::$controller = 'my_maintenance_controller';
         Router::$method = 'index';
    }
}

Und fügen Sie es wie in den system.post_routing Ereignis.

Event::add('system.post_routing', 'in_maintenance');

Wenn Sie laden Sie Ihre Website den Wert von IN_MAINENANCE auf TRUE ändern und alle Anfragen werden zu Ihrer Wartung Seite umgeleitet werden.

Sehen Sie das Ereignis / Haken Dokumentation für weitere Informationen auf einen Haken zu schaffen.

Eine andere Methode, um diese von Makeln ist durch eine Datei überprüft. Wenn es vorhanden ist, Wartung beginnt, so schalten Sie die Seite aus

Wenn ja, können Sie eine der oben genannten Dinge tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top