Я пытаюсь улучшить один из моих расширений пакета, которые загружают мои файлы конфигурации YAML, и мне нужно получить доступ к классу ядра, чтобы использовать метод locateResource()
.Доступ к ядру в класс расширения пакета
Цель состоит в том, чтобы загрузить файлы ресурсов без использования:
__DIR__ . '/../Resources/config'
класс Extension выглядит следующим образом:
class InnovaPathExtension extends Extension
{
/**
* Base path to the config directory of the bundle
* @var unknown
*/
const CONFIG_PATH = '@InnovaPathBundle/Resources/config/';
/**
* List of needed config files
* @var array
*/
protected $filesToLoad = array (
// Services
'services/services.yml',
'services/listeners.yml',
'services/managers.yml',
'services/controllers.yml',
// Parameters
'parameters.yml',
);
/**
* @see \Symfony\Component\DependencyInjection\Extension\ExtensionInterface::load()
*/
public function load(array $configs, ContainerBuilder $container)
{
foreach ($this->filesToLoad as $file) {
// Check if resources exists
try {
$resource = static::CONFIG_PATH . $file;
$filePath = $container->get('kernel')->locateResource($resource);
} catch (\InvalidArgumentException $e) {
throw new \InvalidArgumentException(sprintf('Unable to load "%s"', $resource), 0, $e);
}
// TODO : Load resource
}
return $this;
}
}
Инструкция $container->get('kernel')
генерирует исключение «определение сервиса„ядро“не существует. '
Если я проверю все услуги, зарегистрированные с $container->getServiceIds()
, я нашел один только service_container
.
Не проблема, я беру контейнер обслуживания и проверяю услуги с помощью $container->get('service_container')->getServiceIds()
... И я получаю только одну услугу: service_container
.
Я не могу понять, почему ... Это DI-CEPTION?
Да, это то, что я сделал, прежде чем начать повышение. Я буду использовать 'YamlFileLoader' и' FileLocator', но я хочу удалить ссылку на '__DIR__' в вызове конструктора. – Elorfin
Возможно, но если это касается уведомления SensioInsight, это ошибка положительная. В этом состоянии ядро не загружается по мере того, как вы проверяли и используете __DIR__ - это не плохое решение для кодирования, а ожидаемое решение. Проверьте все основные пакеты от Sensio, KnpLabs, Liip, FOS и т. Д. Это путь! – webda2l
OK. Я не знал 'locateResource' метод, и я думал, что могу использовать его в своем расширении :(. – Elorfin