Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

349
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!