Nikolay
А в чем смысл? Я же могу его заинжектить
Смысл в том чтобы не получать из контейнера напрямую
Dmitry
А в чем смысл? Я же могу его заинжектить
Первый смысл в контроле за другими программистами. Чтобы разрешить им только инжектить сервисы и не разрешать им дёргать то, что не нужно. Например, чтобы вообще запретить использование контейнера как сервис-локатора в основном коде проекта. Второй смысл в оптимизации. При наличии в конфиге общих правил вроде App\: resource: 'src/*' контейнер Symfony сначала парсит и закидывает в себя все классы по маске, а потом производит очистку от лишних, оставляя только публичные сервисы и их зависимости.
Dmitry
А в чем смысл? Я же могу его заинжектить
Поэтому имеет смысл по умолчанию все сервисы делать приватными. А публичными объявить только контроллеры и сервисы с тегами, которые сам фреймворк или какие-нибудь CompilerPass-ы будут дёргать через container->get($class)
Юра
Php: я буду вечно Perl: нуну
Юра
И вообще называть кого-то пхп кодером, это лэнгвизм и дискриминация )
Null
Смысл в том чтобы не получать из контейнера напрямую
А зачем что-то вообще получать из контейнера напрямую 😁
Павел
А зачем что-то вообще получать из контейнера напрямую 😁
В соседнем чате наоборот негодуют, почему убрали эту возможность. Юзают 1 глобал эвент листенер на проект и чтобы не делать конструктор из миллиона зависимостей , юзают контейнер. Но это скорее последствие легаси
artem
Php: я буду вечно Perl: нуну
У меня до сих пор интерфейс роутера на перл) если это правильно так называть
Павел
Видел код где юзали 14 зависимостей в конструкторе. Это нормально. Главное чтобы читабельно было
Мб, но 14 зависимостей скорее говорят о большой отвественности класса, которую можно разделить или сгруппировать
Павел
Это контроллер) там прям Мейн
Так то и контроллер можно разделить, а в случае симфы - в экшенах инжектить. Но в целом да, в таком кейсе не страшно
artem
Так то и контроллер можно разделить, а в случае симфы - в экшенах инжектить. Но в целом да, в таком кейсе не страшно
Блин!( Я ждал холивар) там все по сервисам было и нужно было все аккумулировать
Павел
Блин!( Я ждал холивар) там все по сервисам было и нужно было все аккумулировать
Большое количество зависимостей сложно тестить и ломают тесты. Контроллер же обычно не тестят. Плюс не имеет логики.
Юра
Это наверное джависты спрнгисты у которых нет инжекта в экшн метод
Юра
С другой стороны им и не нужно потому что контроллер один раз создаётся и висит в памяти всеравно все сервисы будут созданы рано или поздно
Юра
Грамотная иде подсветит неиспользуемые сервисы
Юра
Но я всеравно сторонник локальности
Павел
А как же интеграционные тесты?
Ну я например не вижу смысла тестить контроллер. Именно его его функционал, тестить что он вызвал экшен? Я проще протещу роут/апи на success, а для этого уже не надо собирать контроллер вручную
Павел
Тоже самое с консольной командой
Павел
Это и есть интеграционные (функциональные) тесты
Ну это тест апи, а не прям контроллера как класса
Павел
Ну точнее как, для симфы норм, а для архитектуры - не очень, так как сервис локатор
Юра
Я так понимаю основной плюс что симфони может понять какие сервисы не использьзуются и выпилиь их из контейнера или еще как-то оптимизировать
Юра
А если ты достаешь напрямую из контейнера то такое не прокатит
Юра
В том же спринге нет по-моему никаких сервис сабсрайберов и как-то норм живут
Nikolay
Есть сервис, который создается через фабрику. Этот сервис (инстанс из фабрики) нужно добавить в контейнер. Смотрел доку, не нашел примера как это можно сделать, наверное через ContainerConfigurator как то можно добавить. Подскажите пожалуйста какие варианты есть. Есть вариант сделать свой сервис и в нем это сделать, но чет не очень выглядит
Иван
Using a Factory to Create Services (Symfony Docs) https://symfony.com/doc/current/service_container/factories.html
Nikolay
Посмотри ещё
Спасибо, немного забыл про этот вариант. Тут правда костыли со стороны вендора (фабрика возвращает еще одну фабрику) Это от доктрины либо прямо в методе объявляется, либо в конструкторе $camelizedAction = InflectorFactory::create()->build()->classify($action); $this->inflector = InflectorFactory::create()->build(); Пожалуй вариант со своей оберткой тут не так плох
artem
Немножко оффтопа) 32гб озу хватит для поднятия 50 инстанс докера?))
Null
С бузибоксом хоть 1000
artem
С бузибоксом хоть 1000
Забанили в гугл
Null
На тупой вопрос был дан тупой ответ. Busybox это минималистичный образ такой 😁 так-то логично, что у каждого образа свои системные требования
Kirill
Всем привет. Подскажите, пожалуйста, почему может не выполняться миграция? Есть файл с миграцией, при запуске d m m пишет, что все миграции выполнены. В таблице с миграциями последняя миграция другая
Юра
Права на файл может не те?
Kirill
нет, такие же, как и у всех остальных
artem
artem
Ничего более жизненного не видел
Sergey
Кто-нибудь использует DoctrineORM в kubernets? Есть какие-нибудь подводные камни с сессиями к бд? Я давно читал где-то что доктрина группирует сессии и транзакции, может тут есть потенциальные проблемы, если в кластере несколько активных одинаковых подов с доктриной?
artem
Раз уж началась такая пьянка. Зачем и как едят кубер на локалке?
Null
Потому что докер не смог
Потому что докер не смог что? 😁
Юра
Докер не смог на проде стать главным. Поэтому стали ставить себе и на деве кубер
Kirill
Всем привет. Подскажите, пожалуйста, почему может не выполняться миграция, если она создана вручную? Я просто скопировал предыдущую миграцию и заменил в названии файла и в названии класса последнюю цифру. doctrine migration diff выполняется долго, поэтому я сделал так. И я часто так делаю, но случается, что такие миграции не выполняются.
Юра
может у тебя получилась невалидная дата после инкремента?
Юра
например 61 секунда
Kirill
нет, все в порядке, была 14, стала 16
Юра
Права на файл? Опечатка? Бог его знает )
Al
Всем привет. Можно ли провалидировать вложенный массив используя new Assert\Collection ?
Kirill
Всем привет. Можно ли провалидировать вложенный массив используя new Assert\Collection ?
* @Assert\Collection( * allowExtraFields=true, * fields={ * "type" = @Assert\Type("string"), * "text" = @Assert\Type("string"), * "user" = @Assert\Type("string"), * } * )
Al
А если например у меня user содержит массив полей?
Kirill
я не пробовал, но по идее там можно же также Assert\Collection сделать
Павел
Приветствую. Поделитесь плиз, кто как и куда логирует приложение завернутое в докер. В частности разделение аудит логов, от технической части? Смотрю, основная практика - это все в stdout а потом считывание c /var/lib/docker/containers . Потом все это дело в логстеш, там фильтровать только логи приложения по какому то признакому? Короче очень интересно послушать опыт и разные флоу :)
Vlad
"В частности разделение аудит логов, от технической части?" vector умеет. фильтровать логи/трансформировать в другой вид и тд
Andrii
Приветствую. Поделитесь плиз, кто как и куда логирует приложение завернутое в докер. В частности разделение аудит логов, от технической части? Смотрю, основная практика - это все в stdout а потом считывание c /var/lib/docker/containers . Потом все это дело в логстеш, там фильтровать только логи приложения по какому то признакому? Короче очень интересно послушать опыт и разные флоу :)
сейчас у нас так: приложение пишет в логи контейнера, который крутится в k8s. стоит fluentbit, которые собирает все логи, делает магию по фильтрации и трансформации с k8s, и пушит результат в ELK стек. + в fluentbit можно указывать разные места, куда слать обработанные логи
Юра
Кстати кто не видел еще в тему логов https://wiki.php.net/rfc/redact_parameters_in_back_traces
Юра
SensitiveParameter аттрибут
Юра
Симфони его поддерживает
Kirill
Всем привет! Подскажите, что тут не так? /** * @Assert\All({ * @Assert\Type( * HoursWorkedRequestDTO::class * ) * }) * * @Serializer\Type("array<App\Component\Accounting\DTO\HoursWorkedRequestDTO>") * * @Assert\Valid */ Приходит массив DTO и у HoursWorkedRequestDTO не работает валидация. То есть правила, которые описаны внутри HoursWorkedRequestDTO не проверяются
Vlad
А есть кто работал с центрифугой? Вопрос следующейго плана, а как отправить сообщение конкрентому пользователю? Сгенерил джвт с id и каналам, пытаюсь отправить и ничего не происходит на клиенте, а если отправить на весь канал сообщение, то все ок.
Vlad
Vlad