Intereting Posts
Делают ли клиенты memcache разных языков хэшем одинаково? Как использовать KNPPaginatorBundle для разбивки на страницы с использованием репозитория Doctrine? почему php выводит <br />, если я использовал header () или setcookie () только с конкретным запросом Каков наилучший способ вставки нескольких строк в PHP PDO MYSQL? String "array" для реального массива Функция питания в php для вычисления 17 ^ 2147482999 Как создать загрузочную сетку Bootstrap? Уязвимости системы безопасности в php fwrite? CakePHP: действие выполняется дважды, без уважительной причины Я NetBeans, могу ли я каким-либо образом сохранить отпечаток ключа RSA на удаленном сервере или не подтвердить NetBeans ключ до принятия решения? Ajax вызов PHP не возвращает ничего Добавление полей Как php лидирует логические переменные? Почему я не могу получить идентификатор альбома в facebook? Использование SSL / TLS при отправке электронной почты с PHP

Страница обслуживания ZF2

Я пытаюсь настроить страницу обслуживания с ZF2, но она не работает. Я помещаю страницу maintenance.html в общую папку (www), а в моей функции onbootstrap у меня есть следующий код:

$config = $e->getApplication()->getServiceManager()->get('Appli\Config'); if($config['maintenance']) { $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Location', '/maintenance.html'); $response->setStatusCode(503); return $response; } 

Я вхожу в аргумент if. $ Config ['maintenance'] имеет значение true, но не отображает мою страницу maintenance.html, как и ожидалось. Вместо этого отображается страница с запросом. Что-то не так в моем перенаправлении?

Кажется, вы пытаетесь коротко onBootstrap запрос непосредственно из метода onBootstrap . Это не сработает, в этот момент маршрут не был разрешен и контроллер не был отправлен. По сути, все, что вы делаете, это предварительное заполнение ответа, только для того, чтобы оно было переписано после того, как запрос будет перенаправлен и отправлен.

Если вы хотите повлиять на ответ, вам нужно будет прослушать один из других MvcEvent s. Кажется, вы хотите сделать это до отправки диспетчера, поэтому место для этого будет в EVENT_ROUTE , в идеале с высоким приоритетом, так что это произойдет до того, как маршрутизатор будет разрешен маршрутизатором (экономит потраченную впустую обработку, разрешая маршрут, который будет никогда не будет отправлен).

 public function onBootstrap(MvcEvent $e) { $events = $e->getApplication()->getEventManager(); $events->attach(MvcEvent::EVENT_ROUTE, function (MvcEvent $r) { $config = $r->getApplication()->getServiceManager()->get('Appli\Config'); if ($config['maintenance']) { $response = $r->getResponse(); // set content & status $response->setStatusCode(503); $response->setContent('<h1>Service Unavailable</h1>'); // short-circuit request... return $response; } }, 1000); } 

Вы не можете установить код статуса 503 и перенаправить – эти два являются взаимоисключающими, так как перенаправления используют код состояния 3xx.

Вероятно, вы хотите что-то большее:

 $response->setContent(file_get_contents('/path/to/maintenance.html')); $response->setStatusCode(503);