I am migrating an application from Symfony 4.4 to Symfony 5.4. In the case of forms, I have a form that I pass in the constructor a variable ContainerInterface $container
to use a parameter in the configuration of a widget. In version 5.4 this gives me a deprecation warning:
Since symfony/dependency-injection 5.1: The "Symfony\Component\DependencyInjection\ContainerInterface" autowiring alias is deprecated. Define it explicitly in your app if you want to keep using it. It is being referenced by the "App\Form\BuscarAvanzadaNinhoType" service.
How do I solve it?
class BuscarAvanzadaNinhoType extends AbstractType {
private $em;
private $security;
private $uuidEncoder;
private $container;
public function __construct(ManagerRegistry $em, Security $security, UuidEncoder $uuidEncoder, ContainerInterface $container) {
$this->em = $em;
$this->security = $security;
$this->uuidEncoder = $uuidEncoder;
$this->container = $container;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('otrosAspectos', Select2EntityType::class, array(
'class' => EtiquetaAspectoNinho::class,
'remote_route' => 'ninhos_encontrarEtiquetaAspectos',
'primary_key' => 'id',
'text_property' => 'text',
'multiple' => true,
'allow_clear' => false,
'delay' => 250,
'cache' => false,
'minimum_input_length' => 3,
'scroll' => true,
'page_limit' => $this->container->getParameter('limite_resultados_etiquetas'),
'language' => 'es',
'width' => '100%',
'placeholder' => '',
)
);
}
}
You can pass parameters directly without the container.
public function __construct(ManagerRegistry $em, Security $security, UuidEncoder $uuidEncoder, array $formParams) {
$this->em = $em;
$this->security = $security;
$this->uuidEncoder = $uuidEncoder;
$this->formParams = $formParams;
}
services.yml
services:
_defaults:
autowire: true
autoconfigure: true
bind:
$formParams:
limite_resultados_etiquetas: '%limite_resultados_etiquetas%'
In the form:
'page_limit' => $this->formParams['limite_resultados_etiquetas'],