Nikolay
Как я понимаю, так. В доке указано, что можно через функцию получить param('app.admin_email')
Павел
Подскажите по конфигурированию, на 4.4 работало так return static function (ContainerConfigurator $containerConfigurator, ContainerInterface $container): void { $host = $container->getParameter('mailer.host'); }; Каким образом в 5.4 можно получить параметры? Сейчас контейнер нельзя прокидывать
Мне кажется какой то флоу неверный. Параметры подставляются в сконфигурированные сервисы. Функция которую вы показываете, говорит, что сервис принимает параметр (т.е. это абстракция), который будет настроен позже из parameters
Павел
Нужно сделать encode параметров для мейлера
Это наверное должно делаться в сервисе или в каком нить env процессоре
Павел
Можно вообще сразу заэнкодить ручками и положить верные )
Иван
через пхп конфигурировать надо!
Иван
тогда из окружения значение можно хоть через чёрта лысого ногу прогнать
Иван
Я так и делаю
в сервис должен инжектится из контейнера обработанный параметр который в контейнер попадает через пхп конфигурирование контейнера
Nikolay
Вот полностью как было return static function (ContainerConfigurator $containerConfigurator, ContainerInterface $container): void { $host = $container->getParameter('mailer.host'); $user = $container->getParameter('mailer.username'); $port = $container->getParameter('mailer.port'); $password = $container->getParameter('mailer.password'); $env = $container->getParameter('kernel.environment'); $containerConfigurator->extension('framework', [ 'mailer' => ['dsn' => createDsn($env, $host, $user, $password, $port)], ]); }; function createDsn(string $env, string $host, string $user, string $password, string $port): string { $encodedPassword = urlencode($password); $encodedUser = urlencode($user); return "smtp://$encodedUser:$encodedPassword@$host:$port"; }
Иван
никакой магии, кроме прямого приёма в конструктор значения, в сервисе не должно быть
Nikolay
А это вообще какая часть симфы, где с конфигуратором работать?
Можно такое через compiler pass наверное сделать, но мне через php больше нравится
Павел
А все понял, настройки di через php
Vlad
тока почему не dsl
Павел
Ну вроде как на этом этапе еще нет скомпилинных параметров, так как именно тут указываются какие параметры будут
Nikolay
Через param('name') не работает
Павел
Он говорит, что взять из этого параметр при билдинге
Nikolay
Он и не должен
А как тогда получать параметры?
Павел
А как тогда получать параметры?
Не буду утверждать, но я бы сказал никак в том месте
The Ant
На примере фабрики для редис клиента
The Ant
Иван
можно через фабрику, да но по чесноку если, то как часто у тебя без пересборки меняются переменные окружения?
The Ant
почти никогда )
Иван
можно получить на этапе билда всё окружение, сделать с ним всё что надо и вшить в контейнер, чтобы на лету не ресолвить каждый раз
Иван
конечно тогда кеш контейнера не будет вшит в докир
The Ant
ну у меня сборка как у Валентина, на лету нерезолвится, всё в кеше
Иван
кстати, посоны кто вшивает кеш контейнера в докир?
The Ant
насчет докиров не в курсе, что за кеш контейнеры...
Иван
насчет докиров не в курсе, что за кеш контейнеры...
собранный контейнер в смысле, в папке кеш
Nikolay
Через фабрику такое делается
Спасибо, гляну вариант
The Ant
Думаю, че напряму не передашь дсн, оно ж и так сожрет, через енв аргументом закинуть и всё
The Ant
не проще ли пароль поменять на длинный и исключить символы сраные?
Nikolay
не проще ли пароль поменять на длинный и исключить символы сраные?
Может и проще. Тогда не надо будет все эти лишние действия делать
The Ant
именно, меньше странного кода, лучше!
Nikolay
именно, меньше странного кода, лучше!
Просто в доке написано, значит должен быть нормальный способ енкодить эти параметры. Но чо то пока все костыли какие то
The Ant
нету, увы. Даже урленкод не дает гарантии что всё пойдет гладко. Бывает парсер не может распознать символ
The Ant
да ) я с этого горел знатно
Nikolay
да ) я с этого горел знатно
А с фабрикой тоже по идее рабочий вариант должен быть? Хотя бы не выглядит так убого
The Ant
хз, фабрика для такого оверхед какой-то. Фабрику юзаешь когда у тебя нельзя создать простой объект с заданными параметрами
The Ant
в конфиге нельзя это решить через when@test, when@dev ?
The Ant
Хз, должно быть. 5.4 переходная на 6
The Ant
ну как вариант по старинке папочку с названием окружения )
The Ant
В 5.4 это есть?
https://symfony.com/blog/new-in-symfony-5-3-configure-multiple-environments-in-a-single-file в 5.3 добавили
Nikolay
https://symfony.com/blog/new-in-symfony-5-3-configure-multiple-environments-in-a-single-file в 5.3 добавили
Там вообще переделывать хранение этих параметров надо, их 4 приходит и они в ямле лежат
The Ant
не надо будет хранить ничего )
The Ant
Через when?
ну да, на дев один, на прод другой when@dev framework: mailer: dsn: '%env(MAILER_DEV_DSN)%' when@prod framework: mailer: dsn: '%env(MAILER_PROD_DSN)%' а еще лучше просто создай .env.local файл, включи его в гитигнор, и пропиши в нем нужные параметры. На проде будет свой подтягиваться, а на локалке для дев
The Ant
https://symfony.com/blog/new-in-symfony-6-3-scheduler-component Затестил, прикольный пакет. Но конфигурация говнина. Надо переделывать до чегото вменяемого
The Ant
Это который вместо крона ?
что-то вроде, да. Но у него конфиг всратый, и как полноценная замена крону не канает
The Ant
но отправить что-то в определенное время, или циклическая проверка какойнить херни годная штука
Алексей
Надо попробовать :)
Павел
что-то вроде, да. Но у него конфиг всратый, и как полноценная замена крону не канает
А почему конфиг всратый? Тип что с рантаймом проблемы? Просто выглядит все довольно неплохо и понятно
The Ant
А почему конфиг всратый? Тип что с рантаймом проблемы? Просто выглядит все довольно неплохо и понятно
Да через какой-то провайдер делать, хрен пойми где. А если ещё раскидано по разным местам, искать сложно потом.
The Ant
Могли бы просто атрибутом задать параметры
Павел
Могли бы просто атрибутом задать параметры
Для обычного мессаджа мессенджера? Чет мне кажется это всратее
The Ant
Для обычного мессаджа мессенджера? Чет мне кажется это всратее
Ну там по факту обычные месседжи для мессенжера, просто запускаются в своем отдельном транспорте и по таймеру. Транспорт пока что не настраивается толком.
Павел
https://github.com/symfony/scheduler/blob/6.3/DependencyInjection/AddScheduleMessengerPass.php#L36C13-L37C96
Павел
Интересно конечно как под капотом сделано, надо как нить подебажить
Юра
Конфигурация делается реально легко
Юра
Напиши свой сервис в который прокинь конфигурацию и все
Юра
Наоборот не стали бетонировать это и это хорошо
Юра
Совсем обленились )
Юра
Нужно понимать что симфони изначально делалась максимально настраиваемой
Юра
Это не ларавель
Юра
Но судя по популярности ларавеля людям реально проще дать готовое все
Павел
Напиши свой сервис в который прокинь конфигурацию и все
Вопрос в том, что возможно в рантайме проблема будет поменять без изменения кода
Павел
Но это надо дебажить, когда и как там дергается провайдер