У меня есть приложение в Symfony 3.4, и мне нужно зарегистрировать все классы в моем пространстве имен AppBundle.
Пользуюсь get_declared_classes(). Я создал собственное пространство имен AppBundle\MyCustom и сохранил там несколько классов. Проблема в том, что symfony кеширует get_declared_classes() и не кэширует мое пользовательское пространство имен. Когда я использую get_declared_classes() в первый раз (после удаления файлов кеша), я получаю все свои пользовательские классы, но при следующем запуске скрипта возникает проблема. Любые идеи?
вот репо с проблемой: https://github.com/webostin/getdeclaredclasses
не имеет значения, что это происходит в продукте и разработке одновременно






The problem is that symfony caches get_declared_classes()
Это функция PHP, Symfony не может ее контролировать.
Проблема может быть связана с автозагрузкой. При первой загрузке Symfony должен создать кеш, поэтому включает ваш класс. С теплым кешем в этом нет необходимости, поэтому ваш класс не загружается автоматически. get_declared_classes не будет включать ваши классы.
Вы можете наблюдать это поведение, поместив $class = new MyTool(); в 1-ю строку вашего метода execute. Это запустит автозагрузчик, и ваш класс появится в объявленных классах.
Решение: похоже, вы хотите получить все классы, реализующие интерфейс. Вы можете использовать для этого DI.
Создайте собственный тег и класс менеджера, а затем используйте класс менеджера для доступа ко всем помеченным службам в вашей команде.
Подробнее здесь: http://symfony.com/doc/current/service_container/tags.html#creating-custom-tags
DI - это то, что я не хочу использовать, поэтому я использую get_declared_classes(). Конечно, get_declared_classes() - это функция PHP :), и когда я написал symfony caches, я просто написал в сортировщике то же самое, что и ваш:> При 1-й загрузке Symfony должен создать кеш, поэтому включает ваш класс
Какую среду вы используете? Кэш не должен быть проблемой в среде
dev