Я пытаюсь создать страницу перенаправления обслуживания для веб-сайта, чтобы можно было активировать «Режим обслуживания/обновления», что приведет к перенаправлению каждого запроса страницы на страницу «Недоступно для обслуживания». Я установил переключатель на глобальную переменную, записанную с помощью Configure::write() и проверяющую с помощью Configure::read().
Проблема, с которой я сталкиваюсь, заключается в следующем: когда он находится в автономном режиме, как мне перенаправить каждый запрос страницы? Моей первой мыслью было условное $this->redirect(...) в функции AppController beforeFilter(). Но это привело к ошибке «Цикл перенаправления»:
Моя вторая мысль заключалась в том, что, возможно (я новичок в CakePHP), это вызывалось так часто, будучи первым фильтром контроллера базового класса, что эта идея была глупой. Я подумал, что смогу исправить это, создав «MaintenanceFilter», который проверял бы одну и ту же переменную на статус онлайн или офлайн для перенаправления. Однако в CookBook упоминаются фильтры, являющиеся новыми для Cake 2.2, а на этом веб-сайте используется 2.1. Фильтр также не работает, даже если я даю ему приоритет 1 (определяется в приложении/Маршрутизация/Фильтр).
App::uses('DispatcherFilter', 'Routing');
class MaintenanceFilter extends DispatcherFilter
{
public function beforeDispatch(CakeEvent $event)
{
if (strcmp(Configure::read('ServerStatus'), 'online') == 0)
{
$event->stopPropagation();
$dispatcher = new Dispatcher();
$dispatcher->dispatch(array('controller' => 'errors',
'action' => 'maintenance'));
}
}
}
Затем я подумал, что, возможно, я мог бы просто сделать это в более общем виде и установить условие маршрутизации с помощью Router::connect('*', ...), которое перенаправляло бы ВСЕ страницы в /Errors/maintenance, где условная проверка состояния сервера :
Router::connect('*', array('controller' => 'Errors',
'action' => 'maintenance'));
Я разместил его в верхней части файла маршрутизации, чтобы он обрабатывался первым. Как вы могли догадаться, ни одна страница никогда не перенаправлялась на страницу обслуживания.
Я думал, что могу просто создать собственный обработчик исключений и генерировать исключение, когда сервер находится в «автономном режиме», но как тогда мне перенаправить на страницу обслуживания из тела метода обработчика?
Я должен упустить что-то конкретное о Cake 2.1 или просто Cake/MVC в целом. Кто-нибудь видел, что это может быть?