); }»

отаю над многомодульным сайтом, использующим Zend Framework 3, в течение ~ 6 месяцев, учась на ходу. По большей части я был довольно успешным, но я столкнулся с проблемой, которую я опишу ниже. Есть ~ 20 модулей, и я определил, что в каждом модуле module.config.php я должен определить уникальное имя для Layout, как это.

Образец пространства именИмя контроллера: SampleController.phpмодуль / Sample / просмотр / sam_layout.phtml

И в модуле примеров модуль.config.php

'view_manager' => [
    'display_not_found_reason' => true,
    'display_exceptions'       => true,
    'doctype'                  => 'HTML5',
    'template_map' => [
    'layout/layout' => _DIR__ . '/../view/layout/sam_layout.phtml',
    'sample/sample/index' => __DIR__ . '/../view/sample/sample/index.phtml',
    ],
    'template_path_stack' => [
    'Sample' =>  __DIR__ . '/../view',

Если я назову файл макета layout.phtml, хотя я помнил о пространствах имен, я не уверен, что предполагаемый вид отображается или является только частично правильным. Я заметил, что если я переставлю имена модулей в composer.json и modules.config.php, а затем запустлю composer dump-autoload, я получу другой набор смешанных макетов, независимо от того, даю ли файлу layout.phtml уникальный префикс или нет.

Единственная вещь, которая, кажется, проясняет это, это сделать что-то вроде очистки composer.json и modules.config.php, за исключением модуля Application, затем перезапустить дамп-автозагрузку composer или изменить имя модуля, добавив его в composer. json & modules.config перезапустите dump-autoload, а затем верните имя модуля обратно. По сути, встряхните конфигурацию, чтобы заставить то, что когда-либо кажется, удерживать зашифрованные представления, отпустить и заново отобразить все. Обратите внимание, что когда эта проблема волшебным образом проясняется, ее уже нет, и мы можем продолжить разработку кода, как будто ничего не случилось.

Должен отметить, что мы начнем со скелет-приложения в режиме разработки. Я фактически удаляю любые файлы в папке data / cache. Большинство представлений в разных модулях имеют общую панель навигации, но несколько модулей могут выбирать определенные модули, а просматривать панель навигации очень сложно.

Итак, описав выше, у меня есть несколько вопросов. У других разработчиков есть такая же проблема, почему я не могу дать скрипту макета уникальное имя и ожидать, что представление будет выполнено? По мере дальнейшего развития, я уверен, что каждый модуль будет иметь больше макетов и, конечно, больше файлов .phtml в папке sample / sample (взяв пример из приведенного выше), будем ли мы продолжать наблюдать такое поведение? Может ли веб-сервер Apache или PHP7 кэшировать файлы и пути, вызывающие эту проблему, и ZF3 не имеет к этому никакого отношения? Примечание: у меня не включен opcache.

Пожалуйста, будьте милостивы: если вы похороните меня в ОО-коде, это, вероятно, не поможет мне понять, что происходит.

Ответы на вопрос(1)

Ваш ответ на вопрос