2015-03-26 3 views
0

Я хочу реализовать режим обслуживания. Я думаю о проверке всех методов всех моих контроллеров, каждая из которых расширяет класс AbstractActionController.Как реализовать режим обслуживания/ограничение маршрутизации?

Цель состоит в том, чтобы просто проверить флаг boolean, чтобы увидеть, включен ли режим обслуживания, и если да, отобразите страницу HTML с сообщением о техническом обслуживании (например, мы в настоящее время выполняем техническое обслуживание. Пожалуйста, зайдите еще через несколько минут)

Вместо того, чтобы вручную выполнять проверку каждой функции, как я могу настроить проверку, выполняемую до того, как будет выполнена какая-либо маршрутизация?

+0

Эй, там. Я отделил ваш текст в небольших абзацах и попытался прояснить, как ваш вопрос представлен. Попытайтесь свести шум к минимуму. Возможно, вы захотите добавить некоторые детали, какова ваша фактическая маршрутизация. –

+0

Этот ответ может помочь -> http://stackoverflow.com/questions/23435610/zf2-maintenance-page/23442585#23442585 – Crisp

ответ

0

Я успешно реализовал это решение, используя событие MVC 'dispatch' в классе BaseController (который расширяет класс AbstractResultfulController, а также является базовым классом для большинства моих контроллеров действий).

public function setEventManager(EventManagerInterface $events) { 
    parent::setEventManager($events); 
    $events->attach('dispatch', array($this, 'checkMaintenance'), 10); 
    return $this; 
} 

public function checkMaintenance() { 
    $response = $this->getResponse(); 

    $message = $this->getMaintenanceModeMessageOrFalse(); 
    if (false !== $message) { 
     $response->setStatusCode(503); 
     $response->setContent($message); 
     return $response; 
    } 
} 

public function getMaintenanceModeMessageOrFalse() { 
    return "We're currently performing maintenance. Please check back again in a few minutes."; 
} 
0

Я думаю, что лучший подход для создания статического обслуживания страницы манипуляционной этого требования в уровне HTTP-сервере, непосредственно перед фактическим запросом клиента передается приложению.

Это означает, что вы можете показать страницу обслуживания без загрузки вашего приложения. Также этот подход будет намного быстрее, чем любое решение на уровне приложений.

Для nginx вы можете попробовать что-то вроде этого:

location/{ 
    if (-f $document_root/maintenance.html) { 
    return 503; 
    } 
    # ... your current configuration goes here ... 
} 

error_page 503 @maintenance; 

location @maintenance { 
    # This will be catch any type of request 
    rewrite ^(.*)$ /maintenance.html break; 
} 

Для апача:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f 
RewriteCond %{REQUEST_FILENAME} !/maintenance.html 
RewriteCond %{ENV:REDIRECT_STATUS} !=503 
RewriteRule ^.*$ /maintenance.html [L,R=503] 

этим путем, поставив maintenance.html файл в корневом каталоге сайта будет достаточно, чтобы переключить весь сайт режим обслуживания для посетителей.

После завершения технического обслуживания вы можете удалить этот файл. (Переименование будет целесообразным использовать позже).

Надеюсь, что это поможет.

Смежные вопросы