Nikolay
Может кто ткнуть в доку. Есть ли возможность в метод контроллера заинъектить скалярное значение через конфиг?
Юра
Можно
Nikolay
Можно
Плохо смотрел, не подскажешь в каком виде?
Юра
Nikolay
И он в любой метод получается подтянет
Юра
Он станет автовайрбл
Юра
По названию переменной
Юра
Либо типу
Konstantin
не особо реюзабл
Konstantin
интересно, когда завезут #[Parameter('app.foo.param')]
Юра
Ща тебе напишут что нало обернуть скалар в сервис
Юра
И вызвать getValue()
Konstantin
Konstantin
Nikolay
понятно
Konstantin
вот это мне не нравится тем, что этот раздел bind моментально распухнет, вся сотня параметров там будет ошиваться в виде огромной простыни
Юра
проблема в том что метод контроллера немного по другому автовайрится
Юра
Можно написать свой аругмент резволвер
Юра
но проще как выше
Nikolay
Юра
Обычно ты принимаешь ParameterBagInterface
Юра
и из него вытягиваешь параметры
Юра
которые прописаны в конфиге
Юра
но тогда как-то зависимость непонятно от чего
Юра
от всех параметров
Юра
не очень как-то
Юра
так что лучше через bind
Юра
я так делал и нормально
Юра
только надо быть аккуратным если захотел отрефакторить названия переменных
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 не помог
Konstantin
Vlad
Shokha
Vlad
Vlad
rm -rf var
Shokha
удалял var?
сам var не удалял а то что внутри удалял
Vlad
ну попробуй удалить, если не поможет. Заново с нуля переопредели шаблоны
Nikolay
Есть такая ситуация, в интеграционном тесте нужно замокать одну из зависимостей контроллера. Сейчас сделано так, что из контейнера достается контроллер и у него вызывается сеттер, который устанавливает мок вместо зависимости. Есть ли более нормальный подход, чтобы можно было заменить одну из зависимостей?
Konstantin
Nikolay
Shokha
Vlad
плохо посмотрел) дебаг в помощь.
Shokha
Kirill
Прям на боевом сервере😃
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 указан, либо еще что. искать опечатки, ошибки, вот это все
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%'