Как отмечалось ранее, прямой доступ к сервисам из контейнера не рекомендуется.Но мне было немного любопытно посмотреть, как сделать частную услугу публичной.Я попробовал то, что было указано в вопросе, и подтвердил, что это не работает.
Возможно, это не самый простой подход, но проход компилятора поможет:
# src/Kernel.php
# Make the kernel a compiler pass
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
class Kernel extends BaseKernel implements CompilerPassInterface
...
public function process(ContainerBuilder $container)
{
$logger = $container->getAlias(LoggerInterface::class);
$logger->setPublic(true);
}
# And that should do the trick, you can confirm with
bin/console debug:container Psr\Log\LoggerInterface
Имейте в виду, что только службы, в которые введен полный контейнер, смогут воспользоваться этим,Контроллеры, которые выходят из AbstractController, имеют доступ только к небольшому количеству сервисов.
Посмотрите на Подписчики услуг , если вам нужен регистратор в контроллере или вы просто хотите «лучше»способ сделать это.