/** * @return \ProjectServiceContainer|\Symfony\Component\DependencyInjection\Container */ function symfonyFromConfig($config) { $file = TEMP_DIR . '/container.php'; $container = new \Symfony\Component\DependencyInjection\ContainerBuilder(); $container->addCompilerPass(new \Symfony\Component\DependencyInjection\Compiler\AutowirePass()); $loader = new \Symfony\Component\DependencyInjection\Loader\YamlFileLoader($container, new \Symfony\Component\Config\FileLocator(TEMP_DIR)); $loader->load(asfile('config.yml', $config)); $container->compile(); $dumper = new \Symfony\Component\DependencyInjection\Dumper\PhpDumper($container); file_put_contents($file, $dumper->dump()); require_once $file; return new ProjectServiceContainer(); }
use Symfony\Component\Config\ConfigCache; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Dumper\PhpDumper; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; require_once __DIR__ . '/bootstrap.php'; $file = TEMP_DIR . '/container.php'; $containerConfigCache = new ConfigCache($file, $isDebug = TRUE); if (!$containerConfigCache->isFresh()) { $container = new ContainerBuilder(); $loader = new YamlFileLoader($container, new FileLocator(TEMP_DIR)); $loader->load(asfile('config.yml', <<<YAML parameters: mailer.transport: sendmail services: mailer: class: Project\\Mailer arguments: ['%mailer.transport%'] newsletter_manager: class: Project\\NewsletterManager arguments: ["@mailer"] YAML )); $dumper = new PhpDumper($container); file_put_contents($file, $dumper->dump()); } require_once $file; /** @var \Symfony\Component\DependencyInjection\Container $container */ $container = new ProjectServiceContainer(); dump($container->get('newsletter_manager'));
<?php require_once __DIR__ . '/bootstrap.php'; $loader = new \Nette\DI\ContainerLoader(TEMP_DIR); $class = $loader->load('', function (\Nette\DI\Compiler $compiler) { $compiler->loadConfig(asfile('config.neon', <<<NEON parameters: mailer: transport: sendmail services: mailer: class: Project\\Mailer arguments: [%mailer.transport%] newsletter_manager: class: Project\\NewsletterManager arguments: [@mailer] NEON )); }); /** @var \Nette\DI\Container $container */ $container = new $class(); dump($container->getService('newsletter_manager'));
<?php use Nette\Configurator; require_once __DIR__ . '/bootstrap.php'; $config = (new Configurator())->setTempDirectory(TEMP_DIR); $config->addConfig(asfile('config.neon', <<<NEON parameters: mailer: transport: sendmail services: mailer: Project\\Mailer(%mailer.transport%) newsletter_manager: Project\\NewsletterManager(@mailer) NEON )); $container = $config->createContainer(); dump($container->getService('newsletter_manager'));