Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

366
Visualizações
¿Cómo cambiar la visibilidad del servicio "registrador" en Symfony?

Recientemente actualicé de Symfony 3.4 a 4.4

El código base es realmente grande y hay muchas referencias a container->get('logger') de todas partes.

He estado tratando de hacer público este servicio, pero no he tenido suerte con los ejemplos que puedo encontrar. Error:

El servicio o alias "registrador" se eliminó o se incorporó cuando se compiló el contenedor. Debe hacerlo público o dejar de usar el contenedor directamente y usar la inyección de dependencia en su lugar.

En mi service.yml he intentado esto sin suerte:

 Psr\Log\LoggerInterface: public: true Psr\Log\LoggerInterface: alias: 'logger' public: true Psr\Log\LoggerInterface: alias: 'monolog.logger' public: true

¿Cómo puedo hacer público el servicio de logger ?

NOTA: en la actualización de 3.4->4.4 no actualizamos el código base para usar Symfony Flex

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Haría esto con un Compiler Pass . (Los documentos son para 4.4, ya que esa es la versión que está utilizando, los documentos actuales están aquí ).

Cambia el Kernel de tu aplicación para que implemente CompilerPassInterface , y en el método process() puedes manipular el contenedor de servicios directamente:

 // src/Kernel.php namespace App; use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel as BaseKernel; class Kernel extends BaseKernel implements CompilerPassInterface { use MicroKernelTrait; // ... public function process(ContainerBuilder $container): void { $container->getDefinition('monolog.logger')->setPublic(true); } }

En cualquier caso, si yo fuera usted, investigaría usando algo como Rector para actualizar automáticamente su código. Incluso incluye una regla para este caso de uso específico , convirtiendo el (ab)uso del contenedor inyectado y los servicios públicos en una inyección de dependencia adecuada.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda