Nikolay
Как я понимаю, так. В доке указано, что можно через функцию получить
param('app.admin_email')
Павел
Nikolay
Павел
Можно вообще сразу заэнкодить ручками и положить верные )
Иван
через пхп конфигурировать надо!
Иван
тогда из окружения значение можно хоть через чёрта лысого ногу прогнать
Nikolay
Иван
Я так и делаю
в сервис должен инжектится из контейнера обработанный параметр
который в контейнер попадает через пхп конфигурирование контейнера
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";
}
Иван
никакой магии, кроме прямого приёма в конструктор значения, в сервисе не должно быть
Павел
Вот полностью как было
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";
}
А это вообще какая часть симфы, где с конфигуратором работать?
Павел
А все понял, настройки di через php
Vlad
тока почему не dsl
Павел
Ну вроде как на этом этапе еще нет скомпилинных параметров, так как именно тут указываются какие параметры будут
Nikolay
Через param('name') не работает
Павел
Павел
Он говорит, что взять из этого параметр при билдинге
The Ant
Вот полностью как было
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";
}
Через фабрику такое делается
The Ant
На примере фабрики для редис клиента
The Ant
Иван
можно через фабрику, да
но по чесноку если, то как часто у тебя без пересборки меняются переменные окружения?
The Ant
почти никогда )
Иван
можно получить на этапе билда всё окружение, сделать с ним всё что надо и вшить в контейнер, чтобы на лету не ресолвить каждый раз
Иван
конечно тогда кеш контейнера не будет вшит в докир
The Ant
ну у меня сборка как у Валентина, на лету нерезолвится, всё в кеше
Иван
кстати, посоны
кто вшивает кеш контейнера в докир?
The Ant
насчет докиров не в курсе, что за кеш контейнеры...
Иван
Nikolay
The Ant
Вот полностью как было
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";
}
Ахах, я только сейчас понял что это костыль, чтобы заенкодить юзернейм и пароль с нестандратными для симфы символами :D
The Ant
Думаю, че напряму не передашь дсн, оно ж и так сожрет, через енв аргументом закинуть и всё
Nikolay
Nikolay
The Ant
не проще ли пароль поменять на длинный и исключить символы сраные?
The Ant
именно, меньше странного кода, лучше!
The Ant
нету, увы. Даже урленкод не дает гарантии что всё пойдет гладко. Бывает парсер не может распознать символ
Nikolay
The Ant
да ) я с этого горел знатно
The Ant
хз, фабрика для такого оверхед какой-то.
Фабрику юзаешь когда у тебя нельзя создать простой объект с заданными параметрами
Nikolay
The Ant
в конфиге нельзя это решить через when@test, when@dev ?
Nikolay
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
The Ant
The Ant
не надо будет хранить ничего )
Nikolay
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
Могли бы просто атрибутом задать параметры
Павел
Павел
Павел
https://github.com/symfony/scheduler/blob/6.3/DependencyInjection/AddScheduleMessengerPass.php#L36C13-L37C96
Павел
Интересно конечно как под капотом сделано, надо как нить подебажить
Юра
Конфигурация делается реально легко
Юра
Напиши свой сервис в который прокинь конфигурацию и все
Юра
Наоборот не стали бетонировать это и это хорошо
Юра
Совсем обленились )
Юра
Нужно понимать что симфони изначально делалась максимально настраиваемой
Юра
Это не ларавель
Юра
Но судя по популярности ларавеля людям реально проще дать готовое все
Павел
Но это надо дебажить, когда и как там дергается провайдер