Как запретить Symfony 3 перестраивать маршруты при редактировании контроллера - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю в контроллере, код, который я изменяю, должен оставаться здесь.Маршруты определяются как аннотации в контроллере.

Итак, возможно, это не причина, но всякий раз, когда я изменяю свой код и обновляю свою страницу, первое обновление происходит очень медленно (проект огромен).много контроллеров).После первого обновления, следующие быстро.Поэтому я думаю, что Symfony обнаружит, что контроллер изменился, и перестроит кэш маршрутизатора.

Это больно.

Как временно отключить повторное сканирование всего проекта на наличие маршрутов?

1 Ответ

0 голосов
/ 22 февраля 2019

Значительные задержки в среде dev вызваны перестройкой контейнера.На самом деле это очень хорошее решение от разработчиков Symfony, поскольку оно позволяет вам сосредоточиться на самой разработке и не тратить время на поиски загадочных ошибок, которые на самом деле будут вызваны скрытой несовместимостью между вашим кодом и содержимым контейнера.

Самый простой способ избежать автоматической перестройки контейнера - это переключиться в среду prod, где Symfony ожидает, что вы позаботитесь о контейнере самостоятельно.Однако в этом случае вы также потеряете множество других удобных инструментов, предоставляемых Symfony, в среду dev.

Существует также несколько более сложная альтернатива.Взгляните на метод Kernel::initializeContainer(), он отвечает за инициализацию контейнера.Как вы можете видеть из кода - Symfony проверяет, является ли контейнер свежим.Это делается путем загрузки .meta файлов, которые находятся в контейнере, и проверки того, все ли перечисленные в них файлы такие же, какими они были во время создания контейнера.Так как этот метод является довольно внутренним - он не открыт для простых изменений, но вы можете скопировать / вставить его в контейнер вашего приложения и изменить в соответствии с вашими потребностями.Конечно, вы должны понимать, что этот подход не может рассматриваться как рекомендуемый способ и вряд ли поддерживается разработчиками Symfony, поэтому вы должны принять возможные последствия, но все же - это возможно реализовать.

...