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
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.