Я пытаюсь сделать страницу перенаправления обслуживания для веб-сайта, чтобы можно было активировать «Режим обслуживания/обновления», что приведет к перенаправлению каждого запроса на страницу «Вниз для обслуживания» ». Я установил переключатель в глобальную переменную, написанную с помощью Configure :: write(), и проверил с помощью Configure :: read().Техническое обслуживание Переадресация в CakePHP 2.0
Проблема, с которой я столкнулся, - когда она находится в автономном режиме, как мне перенаправить запрос каждой страницы? Моя первая мысль была условной $ this-> redirect (...) в функции beforeFilter() AppController. Но это привело к ошибке «Перенаправление Loop»:
Моя вторая мысль была, что, возможно (я новичок в 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'));
}
}
}
Я тогда подумал, что, возможно, я просто не мог сделать это в более общем плане, а также установить Routing состояния с маршрутизатором :: подключение («*», ...), которые будут перенаправлять все страницы/Ошибки/техническое обслуживание, где условная проверка состояния сервера:
Router::connect('*', array('controller' => 'Errors',
'action' => 'maintenance'));
Я поместил это в начале файла маршрутизации поэтому будет обрабатываться первым. Как вы могли догадаться, ни одна страница не перенаправлялась на страницу обслуживания.
Я думал, что могу просто создать собственный обработчик исключений, и выкинуть исключение, когда сервер находится в «автономном режиме», но как я могу перенаправить на страницу обслуживания из тела метода обработчика?
Мне не хватает какого-либо конкретного предмета Cake 2.1 или просто Cake/MVC в целом. Кто-нибудь видит, что это может быть?
Nice catch! Вы были совершенно правы; как только я добавил проверку текущей страницы на страницу обслуживания, она работала без сбоев. Большое спасибо! –