> "Symfony\Component\DependencyInjection\ContainerInterface" 自动装配 > 别名已弃用。如何在 symfony 5.1 上消除它?

The > "Symfony\Component\DependencyInjection\ContainerInterface" autowiring > alias is deprecated. How eliminate it on symfony 5.1?

我正在将应用程序从 Symfony 4.4 迁移到 Symfony 5.4。对于表单,我有一个表单,我在构造函数中传递了一个变量 ContainerInterface $container 以在小部件的配置中使用参数。在 5.4 版中,这给了我一个弃用警告:

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.

如何解决?

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' => '',
                        )
        );

        
    }

    

}

可以不用容器直接传参

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%'

形式为:

'page_limit' => $this->formParams['limite_resultados_etiquetas'],

不使用 ContainerInterface,而是使用 ContainerBagInterface