Ejemplo n.º 1
0
/**
 * @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'));