Мне нужно проверить Locationtype и возможно, тогда нужно изменить локацию
Book -> Location -> Locationtype
Суть сравнения в том, что админка точно так же светится как и любой другой публичный контроллер, но это не мешает ей быть защищенной от постороннего вмешательства в её работу.
И работа с БД "жестко отвязанная от контроллера" (как пример другой крайности) - по моему, ничуть не лучше, чем работа с БД жестко к контроллеру привязанная.
Так же как до сих пор не думаю, что есть какой-то смысл переносить консольную команду заточенную исключительно под 1 проект - в какой-то другой проект, где она работать не будет (в виду разности архитектур БД). Или Вы предлагаете вместо просто удаления конкретного набора файлов в соответствии с парой простых правил в рамках проекта - написать целый универсальный комбайн со сложными схемами работы, для универсальности удаления нескольких файлов?
тут я с Вами согласен, что они "светятся наружу", но админ-панель с большей вероятность наружу светится... это не повод делать вместо админ-панели управление сайтом через консоль.
Эту проблему решает банальное отсутствие вывода в браузер - проверка гет-параметра, если задан и задан правильно - выполняем действие N.
А если симфони-консоль полностью переносится на любой другой ФВ, я подозреваю, что в ней нет встроенных механизмов для работы с БД, а если так, то вместо готового контроллера настроенного именно под этот проект, с готовым конфигом и моделями/репозиторями и пр. механизмами для обслуживания БД - мы будем писать очередной велосипед, для обработки данных.
К тому же, как я уже писал выше - эта команда будет нужна и будет работать только в этом конкретно взятом проекте, это же не composer-модуль для управления картинками, а код написанный в рамках (и исключительно для) этого проекта, который эти картинки загружает. По этому, вопрос переносимости - мало актуален для этого индивидуального случая.
Всё это делается по CRON'у, который запускает какой-то метод контроллера
Эх, а я хотел обойтись без CRON, похоже не судьба :)
Да, я так и делаю
Collections have a filtering API that allows to slice parts of data from a collection. If the collection has not been loaded from the database yet, the filtering API can work on the SQL level to make optimized access to large collections.