Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

343
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda