После переименования директории проекта Zend Framework плагин redirect () перестал работать
Я хочу протестировать новый дизайн моего проекта, не выключая оригинальный. Я сделал копию всего исходного каталога в новый каталог. Я подготовил поддомен и имя каталога следующим образом (это общий хостинг):
<pre>
http://project.mydomain.com/
/public/user1/project/
http://project1.mydomain.com
/public/user1/project1/
</pre>
То же самое я сделал на своем локальном хосте (Windows, Apache2.4, php 5.6). Просто добавьте "1" к новому имени каталога и скопируйте все содержимое исходного каталога. На localhost оба "сайта" работают с любой проблемой.
Но на виртуальном хостинге дублированный сайт работает нормально, пока я не попытаюсь использовать плагин управления перенаправлением. В результате я вижу только пустую страницу. Это происходит во всех моих 14 модулях и с любым маршрутом, который я использовал.
Пример вызова:
<pre>
public function fakeAction()
{
if ( $this->getRequest()->isPost() )
{
return $this->redirect()->toRoute('main');
}
return $this->redirect()->toRoute('login');
}
</pre>
где маршрут 'main' настроен как:
<pre>
return [
'router' => [
'routes' => [
'main' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\MainController::class,
'action' => 'index'
]
]
],
</pre>
Несколько других фактов:
- Я не использовал события (например, MvcEvent::EVENT_DISPATCH или любые другие)
У меня есть только один метод onBootsrtap() в модуле приложения (еще 13 модулей - это не что иное, как getConfig() в Module.php):
публичная функция onBootstrap (событие MvcEvent $) { $application = $event->getApplication(); $serviceManager = $application->getServiceManager(); $sessionManager = $serviceManager->get( SessionManager::class); $ SessionManager-> начать (); }
$ this-> redirect () -> toRoute ('main') возвращает (IMHO) правильный объект:
Zend \ Http \ PhpEnvironment \ Response Object ([версия: защищенный] => [contentSent: защищенный] => [рекомендованный аргументы: защищенный] => Массив ( [100] => Продолжить [101] => Протоколы переключения [102] => Обработка [200] => OK [201] => Создано [202] => Принято [203] => Неавторизованная информация [204] => Нет содержимого [205] => Сброс содержимого [206] => Частичное содержимое [207] => Мульти-статус [208] => Уже сообщено [226] => Используется IM [300] => Множественный выбор [301] => Постоянно перемещено [302] => Найдено [303] => См. Другие [304] => Не изменено [305] => Использовать прокси [306] => Переключить прокси [307] => Временное перенаправление [308] => Постоянное перенаправление [400] => Неверный запрос [401] => Несанкционированный [402] => Требуется оплата [403] => Запрещено [404] => Не найдено [405] => Метод не разрешен [406] => Недопустим [407] => Требуется проверка подлинности прокси [408] => Время ожидания запроса [409] => Конфликт [410] => Ушел [411] => Требуемая длина [412] => Сбой предварительного условия [413] => Слишком большой объект запроса [414] => Запрос URI для o Длинный [415] => Неподдерживаемый тип носителя [416] => Запрошенный диапазон не удовлетворяется [417] => Ожидание не выполнено [418] => Я чайник [422] => Необработанный объект [423] => Заблокирован [424] => Сбой зависимости [425] => Неупорядоченная коллекция [426] => Требуется обновление [428] => Требуется предварительное условие [429] => Слишком много запросов [431] => Слишком большие поля заголовка запроса [444] => Соединение закрыто без ответа [451] => Недоступно по юридическим причинам [499] => Закрытый запрос клиента [500] => Внутренняя ошибка сервера [501] => Не реализовано [502] => Плохой шлюз [503] => Служба недоступна [504] => Тайм-аут шлюза [505] => Версия HTTP не поддерживается [506] => Вариант также согласовывается [507] => Недостаточно памяти [508] => Обнаружен цикл [510] => Не расширен [511] => Требуется проверка подлинности сети [599] => Ошибка тайм-аута подключения к сети) [statusCode:protected] => 302 [reasonPhrase:protected] => [headers:protected] => Zend\Http\Headers Object ( [pluginClassLoader:protected] => [headersKeys:protected] => Ar луч ( [0] => местоположение)
[headers:protected] => Array ( [0] => Array ( [name] => Location [line] => Location: / ) ) ) [metadata:protected] => Array ( ) [content:protected] => )
Адрес в браузере остается прежним.
- Инструмент разработчика браузера показывает, что браузер никуда не перенаправляется (нет новых записей на вкладке сети),
- Браузер не получает никаких новых входящих данных.
- Apache error.log, предоставленный поставщиком, не имеет записей
Apache access.log показывает
05/Mar/2018:13:43:51 +0100 xxx.xx.xx.xxx GET /favicon.ico HTTP/1.0 Статус: 200 318 B
05/Mar/2018:13:43:49 +0100 xxx.xx.xx.xxx POST /open HTTP/1.0 Status: 200 23 B
Может быть, это подсказка: это нормально, что сервер отправляет /favicon.ico ПОСЛЕ ПОСТ? Но почему? Я возвращаю как результат fakeAction () Zend \ Http \ PhpEnvironment \ Response объект не ViewModel.
Я ловлю все исключения, ошибки и строгие уведомления, но в этом случае - Apache/php/framework не вызывает ни одного из них.
И последний тест: в случае, если некоторые файлы были повреждены во время копирования, я просто переименовал каталог рабочей версии из "проекта" в "проект1", эффект тот же - перенаправление не работает.
ОБНОВЛЕНИЕ 1
- Я удалил каталог производителя и получил его снова через композитор.
- Кэш понятен (я не использовал кеш, Zend Framework все время находится в разработке)
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ!
Я узнал, что случилось. Как я написал в одном из моих ответов, я использую composer
через интерфейс Zend Studio. Сегодня я открыл консоль Zend Studio и тщательно проверил журнал консоли. Каждый раз, когда я использовал команду обновления / установки зависимостей composer
использовал собственный кеш (не онлайн-хранилище) и скопировал модуль zend-developer-tool НО (по неизвестной причине) один из файлов модуля был поврежден в кеше композитора на локальном жестком диске. После того, как я удалил кэш композитора и снова запустил зависимости update / instal, все работает как должно. Спасибо всем за усилия.
1 ответ
Наконец-то я проследил источник проблемы. Прямо сейчас мне не понятно "почему", но проблема связана с модулем zendframework/zend-developer-tools
, Почему я уверен, что этот модуль вышел из строя? Я не. Но, возможно, это поможет кому-то с подобными случаями.
В бессилии я удалил весь раздел require-dev и восстановил файлы конфигурации (composer update
) и проблема исчезла! Это раздел:
"require-dev" : {
"zendframework/zend-developer-tools" : "^1.1",
"zendframework/zend-debug" : "^2.5",
"san/san-session-toolbar" : "^1.0",
"zfcampus/zf-development-mode" : "^3.1"
},
Я подумал, что, возможно, @edigu имеет право, и проблема с автоматически генерируемыми файлами, и это только совпадение. Я должен был знать это на будущее - какой модуль (если есть) отвечает за мою проблему. После отката к "сломанной версии" я начал удалять модуль один за другим из этого раздела (и, конечно, я всегда восстанавливал файлы). Эффект был тот же - проблема была еще жива. Только когда я удалил zend-developer-tools
все работает нормально...
Конечно, если я удалю zend-developers-tool
в исходном проекте, а затем я копирую его в новый каталог - все отлично работает с самого начала.
Как я уже писал выше - пока не знаю "почему". Но это повторяется. Каждый раз, когда я копирую оригинальный проект - у меня возникает проблема с редиректом, которая исчезла после удаления этого модуля...
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ!
Я узнал, что случилось. Как я написал в одном из моих ответов, я использую composer
через интерфейс Zend Studio. Сегодня я открыл консоль Zend Studio и тщательно проверил журнал консоли. Каждый раз, когда я использовал команду обновления / установки зависимостей composer
использовал собственный кеш (не онлайн-хранилище) и скопировал модуль zend-developer-tool НО (по неизвестной причине) один из файлов модуля был поврежден в кеше композитора на локальном жестком диске. После того, как я удалил кэш композитора и снова запустил зависимости update / instal, все работает как должно. Спасибо всем за усилия.