После переименования директории проекта 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, все работает как должно. Спасибо всем за усилия.

Другие вопросы по тегам