Get_declared_classes в symfony 3.4

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

вот репо с проблемой: https://github.com/webostin/getdeclaredclasses

Какую среду вы используете? Кэш не должен быть проблемой в среде dev

Nikita Leshchev 23.07.2018 16:50

не имеет значения, что это происходит в продукте и разработке одновременно

Michal Otfinowski 23.07.2018 16:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
219
1

Ответы 1

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 должен создать кеш, поэтому включает ваш класс

Michal Otfinowski 24.07.2018 08:58

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