Nikolay
Может кто ткнуть в доку. Есть ли возможность в метод контроллера заинъектить скалярное значение через конфиг?
Юра
Можно
Nikolay
Можно
Плохо смотрел, не подскажешь в каком виде?
Юра
Nikolay
И он в любой метод получается подтянет
Юра
Он станет автовайрбл
Юра
По названию переменной
Юра
Либо типу
Konstantin
не особо реюзабл
Nikolay
не особо реюзабл
А как такие вещи лучше передавать?
Konstantin
интересно, когда завезут #[Parameter('app.foo.param')]
Юра
Ща тебе напишут что нало обернуть скалар в сервис
Юра
И вызвать getValue()
Konstantin
А как такие вещи лучше передавать?
да никак, пишу руками, страдаю
Konstantin
Nikolay
понятно
Konstantin
вот это мне не нравится тем, что этот раздел bind моментально распухнет, вся сотня параметров там будет ошиваться в виде огромной простыни
Юра
проблема в том что метод контроллера немного по другому автовайрится
Юра
Можно написать свой аругмент резволвер
Юра
но проще как выше
Konstantin
Можно написать свой аругмент резволвер
про то же думаю, да. но мне в контроллере редко параметры нужны, например. почти всегда только сервисы
Юра
Обычно ты принимаешь ParameterBagInterface
Юра
и из него вытягиваешь параметры
Юра
которые прописаны в конфиге
Юра
но тогда как-то зависимость непонятно от чего
Юра
от всех параметров
Юра
не очень как-то
Nikolay
Обычно ты принимаешь ParameterBagInterface
мне не нравится тащить ради одного параметра такое
Юра
так что лучше через bind
Юра
я так делал и нормально
Konstantin
про то же думаю, да. но мне в контроллере редко параметры нужны, например. почти всегда только сервисы
class BlogControlller { public function indexAction( BlogService $blogService, BlogPostRepository $blogRepo, ): Response { return $this->render(..., [ 'posts' => $blogRepo->findForIndex($blogService->getPostsPerPage()), ]) } }
Юра
только надо быть аккуратным если захотел отрефакторить названия переменных
Nikolay
я так делал и нормально
Спасибо, так и сделаю, более менее нормально
Konstantin
грубо говоря вот так (пример выдуманный только что). типа сами по себе параметры, как правило, в контроллере не нужны, они обычно какому-то сервису принадлежат
Konstantin
и тогда можно оттуда их доставать. альтернативный вариант, да, свой резолвер и писать #[Parameter('app.foo.param')] $param в контроллере, там 20 строчек кода получится
Юра
мне кажется в закромах гитхаба наверное уже есть какой-то такой резволвер
Konstantin
<?php declare(strict_types=1); namespace App\Attribute; #[\Attribute(\Attribute::TARGET_PARAMETER)] class Parameter { public function __construct(public readonly string $name) {} }
Konstantin
<?php declare(strict_types=1); namespace App\Resolver; use App\Attribute\Parameter; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; class ParameterValueResolver implements ArgumentValueResolverInterface { public function __construct( private readonly ParameterBagInterface $parameterBag ) { } public function supports(Request $request, ArgumentMetadata $argument): bool { return 'string' === $argument->getType() && $argument->getAttributes(Parameter::class, ArgumentMetadata::IS_INSTANCEOF); } public function resolve(Request $request, ArgumentMetadata $argument): iterable { yield $this->parameterBag->get($argument->getAttributes()[0]->name); } }
Shokha
https://symfony.com/doc/5.4/controller/error_pages.html#overriding-the-default-error-templates хотел переопределить шаблон ошибок сделал в том порядке как в доке указано но все равно не получается! .env => APP_ENV=prod bin/console cache:clear не помог
Shokha
https://symfony.com/doc/current/controller/error_pages.html
тоже самое ссылку скинул я
Vlad
rm -rf var
Shokha
удалял var?
сам var не удалял а то что внутри удалял
Vlad
ну попробуй удалить, если не поможет. Заново с нуля переопредели шаблоны
Nikolay
Есть такая ситуация, в интеграционном тесте нужно замокать одну из зависимостей контроллера. Сейчас сделано так, что из контейнера достается контроллер и у него вызывается сеттер, который устанавливает мок вместо зависимости. Есть ли более нормальный подход, чтобы можно было заменить одну из зависимостей?
Shokha
ну попробуй удалить, если не поможет. Заново с нуля переопредели шаблоны
не помог вел команду /bin/console debug:twig @Twig/Exception/error.html.twig
Vlad
не помог вел команду /bin/console debug:twig @Twig/Exception/error.html.twig
ну значит что то не так делаешь, посмотри в демо. https://github.com/symfony/demo
Nikolay
services_test.yaml с оверрайдом нужного сервиса не подойдет?
Не совсем подходит в данной ситуации
Shokha
ну значит что то не так делаешь, посмотри в демо. https://github.com/symfony/demo
розница не какой не вижу! там тоже просто создали папку с файлами и все
Vlad
плохо посмотрел) дебаг в помощь.
Shokha
плохо посмотрел) дебаг в помощь.
какой дебаг в прод режиме))
Vlad
какой дебаг в прод режиме))
обычный. у себя в прод локально переводишь и дебажишь
Kirill
какой дебаг в прод режиме))
Конечно же эхами и вардампами😃
Kirill
Прям на боевом сервере😃
Vlad
розница не какой не вижу! там тоже просто создали папку с файлами и все
Я ради интереса даже поднял ето демо, и почему то здесь работает. Странно)
Shokha
Скорее всего у меня есть EventListener для ошибок
Aydar
Aydar
Aydar
Блин, подпись пропала
Aydar
Всем привет! Столкнулся с подобной ошибкой при попытке создания миграция для сущностей. Сущности создал руками. Подобного кейса в интернете найти не смогу. Можете, пожалуйста, помочь, если кто знает в чем может быть проблема
Konstantin
я бы добавил -vvv и погулял бы по файлам из трейса
Konstantin
я, правда, и сущности руками пишу, а не кодгены паршивые (именно такое впечатление сложилось о maker-е - он вечно ломается) пользую
Aydar
Понял. Спасибо за помощь)
Konstantin
причин, просто, с виду, много может быть - кривой конфиг, кривая дока. я бы на вашем месте не тратил на это время, описать сущность даже с 20 полями - дело пяти минут, геттеры-сеттеры идешка сгенерит
Vlad
маппишь аттрибутами или аннотациями? Добавь явно способо аннотирования для доктрины, удали кеш и попробуй еще раз
Vlad
Хотя канеш лучше руками, там действительно ничего сложного и страшного
Aydar
Уже разобрался. Большое спасибо за помощь
Nikolay
Подскажите по такой проблеме, не инъектится скалярный параметр через конструктор для команды (symfony console), хотя явно прописал в виде. В чем может быть причина? arguments: $param: '%value%'
Konstantin
что говорит-то?
Nikolay
Cannot autowire service, argument "expiredAt" of method "__construct()" is type-hinted "int", you should configure its value explicitly
Konstantin
либо неправильно id указан, либо еще что. искать опечатки, ошибки, вот это все
Nikolay
либо неправильно id указан, либо еще что. искать опечатки, ошибки, вот это все
Id правильно указан, без этого параметра все инъектится, пробовал другой параметр закинуть, тоже самое
Konstantin
я себе сходу не могу представить ситуацию как это могло сломаться. только если невнимательность какая-то
Nikolay
public function __construct( EntityManagerInterface $em, PartnerRepository $partnerRepository, int $daysBeforePartnerCertificationExpired ) { $this->em = $em; $this->partnerRepository = $partnerRepository; $this->daysBeforePartnerCertificationExpired = $daysBeforePartnerCertificationExpired; parent::__construct(); }
Nikolay
BillingPartnerBundle\Command\PartnerNotifyCommand: autowire: true arguments: $daysBeforePartnerCertificationExpired: '%days_to_report_before_partner_certification_expires%'