Когда я пытаюсь вызвать контейнер через
self::bootKernel();
$container = static::getContainer();
Я получаю сообщение об ошибке «LogicException: не удалось найти службу «test.service_container». Попробуйте обновить конфигурацию «framework.test» до «true». Хотя мой config/packages/test/framework.php выглядит так
return static function (FrameworkConfig $framework): void
{
$framework
->test(true);
$session = $framework->session();
$session
->storageFactoryId('session.storage.factory.mock_file');
};
Я могу добраться до самого контейнера через
$container = self::$kernel->getContainer();
однако я не могу получить доступ ни к одной из своих служб. Потому что я получаю сообщение об ошибке каждый раз, когда "Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: служба или псевдоним "App\User\Infrastructure\Repository\UserRepository" был удален или встроен при компиляции контейнера. Вы должны либо сделать его общедоступным , или прекратите использовать контейнер напрямую и вместо этого используйте внедрение зависимостей».
Если вы хотите получить доступ к своему сервису от Container
, вы должны сделать его общедоступным: # config/services.yaml services: session.storage.factory.mock_file: public: true
до сих пор я пытался сделать службы общедоступными, я также создал специальный файл services_test.php, но ни одно из решений не помогает
Проблема решилась модификацией метода configureContainer в ядре. Нужно было добавить import services_test.php
$container->import($this->getConfigDir() . '/{services}_' . $this->environment . '.php');
Учитывая, что есть как минимум дюжина или около того недавних одинаковых вопросов, возможно, вы сэкономите немного времени, подробно описав, какие из различных решений вы пробовали?