addDefinitions() 공개 메소드

Add definitions to the container.
public addDefinitions ( string | array | DI\Definition\Source\DefinitionSource $definitions )
$definitions string | array | DI\Definition\Source\DefinitionSource Can be an array of definitions, the name of a file containing definitions or a DefinitionSource object.
예제 #1
1
 /**
  * @param $env
  * @return Container
  */
 public function getContainer($env)
 {
     $container = null;
     $builder = new ContainerBuilder(Container::class);
     //        $builder = new ContainerBuilder();
     foreach (glob(APP_HOME . '/conf/conf.d/*.conf.php') as $filename) {
         $builder->addDefinitions($filename);
     }
     $definitionsEnumFile = APP_HOME . '/conf/config.' . $env . '.php';
     if (file_exists($definitionsEnumFile)) {
         $builder->addDefinitions($definitionsEnumFile);
     }
     $builder->useAnnotations(false);
     $builder->useAutowiring(true);
     switch ($env) {
         case EnvironmentEnum::DEV:
             $builder->setDefinitionCache(new ArrayCache());
             break;
         case EnvironmentEnum::PROD:
         default:
             $cache = $this->getCache();
             $builder->setDefinitionCache($cache);
             $builder->writeProxiesToFile(true, APP_HOME . '/var/cache/proxies');
             break;
     }
     $container = $builder->build();
     return $container;
 }
예제 #2
0
 /**
  * @param $env
  * @return \DI\Container
  */
 public function getContainer($env)
 {
     $builder = new ContainerBuilder();
     foreach (glob(APP_HOME . '/conf/conf.d/*.conf.php') as $filename) {
         $builder->addDefinitions($filename);
     }
     $builder->addDefinitions(APP_HOME . '/conf/config.' . $env . '.php');
     switch ($env) {
         case EnvironmentEnum::DEV:
             $builder->setDefinitionCache(new ArrayCache());
             break;
         case EnvironmentEnum::PROD:
             $redis = new Redis();
             $redis->pconnect('localhost');
             $redis->setOption(Redis::OPT_PREFIX, 'homeservice:cache:di:');
             $cache = new RedisCache();
             $cache->setRedis($redis);
             $builder->setDefinitionCache($cache);
             $builder->writeProxiesToFile(true, APP_HOME . '/var/cache/proxies');
             break;
     }
     $builder->useAnnotations(true);
     $container = $builder->build();
     return $container;
 }
 private function createContainer(array $definitions = [])
 {
     $builder = new ContainerBuilder();
     $builder->addDefinitions(__DIR__ . '/../../res/config/config.php');
     $builder->addDefinitions([ContainerInterface::class => get(Container::class), Twig_LoaderInterface::class => object(Twig_Loader_Array::class)->constructor([]), ResourceRepository::class => object(NullRepository::class)]);
     $builder->addDefinitions($definitions);
     return $builder->build();
 }
예제 #4
0
 private function createContainer($definitions = [])
 {
     $builder = new ContainerBuilder();
     $builder->addDefinitions(__DIR__ . '/../res/config/config.php');
     $builder->addDefinitions([ResourceRepository::class => new InMemoryRepository()]);
     $builder->addDefinitions($definitions);
     return $builder->build();
 }
 public function __invoke(AppBuilder $appBuilder)
 {
     $containerBuilder = new ContainerBuilder();
     $containerBuilder->addDefinitions($appBuilder->getConfigService()->get('php-di'));
     $containerBuilder->addDefinitions([BundleService::class => $appBuilder->getBundleService(), ConfigService::class => $appBuilder->getConfigService()]);
     $container = $containerBuilder->build();
     $container->set(Container::class, $container);
     $appBuilder->setContainer($container);
 }
예제 #6
0
 /**
  * Container compilation.
  *
  * @param mixed $config Configuration file/array.
  *
  * @link http://php-di.org/doc/php-definitions.html
  *
  * @return ContainerInterface
  */
 public static function buildContainer($config = [])
 {
     $builder = new DI\ContainerBuilder();
     $builder->useAnnotations(true);
     $builder->addDefinitions(['request' => \Zend\Diactoros\ServerRequestFactory::fromGlobals(), 'response' => DI\object('Zend\\Diactoros\\Response'), 'http_flow_event' => DI\object('Penny\\Event\\HttpFlowEvent')->constructor('bootstrap', DI\get('request'), DI\get('response')), 'event_manager' => DI\object('Zend\\EventManager\\EventManager'), 'dispatcher' => DI\factory(function ($container) {
         return new \Penny\Dispatcher($container->get('router'), $container);
     })]);
     $builder->addDefinitions($config);
     $container = $builder->build();
     $container->set('di', $container);
     return $container;
 }
예제 #7
0
 /**
  * @return Container
  */
 public function createContainer()
 {
     $builder = new ContainerBuilder();
     $builder->addDefinitions(__DIR__ . '/config.php');
     $moduleConfigs = new Finder();
     $moduleConfigs->files()->in(__DIR__ . '/../Module')->path('/.+/')->name('config.php');
     foreach ($moduleConfigs as $moduleConfig) {
         /** @var SplFileInfo $moduleConfig */
         $builder->addDefinitions($moduleConfig->getPathname());
     }
     return $builder->build();
 }
예제 #8
0
 /**
  * @param ConfigRepository $config
  * @return \DI\Container
  */
 private function initContainer(ConfigRepository $config)
 {
     $builder = new ContainerBuilder();
     // Register ConfigRepository
     $builder->addDefinitions([ConfigRepository::class => $config]);
     // Register container definitions
     $definitions = $config->get('container')['definitions'];
     foreach ($definitions as $definition) {
         $builder->addDefinitions($definition);
     }
     $container = $builder->build();
     return $container;
 }
 /**
  * @test
  */
 public function shows_error_page_with_dev_environment()
 {
     $containerBuilder = new ContainerBuilder();
     $containerBuilder->addDefinitions(__DIR__ . '/../res/config/config.php');
     $containerBuilder->addDefinitions(__DIR__ . '/../res/config/env/dev.php');
     $container = $containerBuilder->build();
     /** @var ErrorHandlerMiddleware $middleware */
     $middleware = $container->get(ErrorHandlerMiddleware::class);
     $response = $middleware->__invoke(new ServerRequest(), function () {
         throw new \Exception('Hello world');
     });
     $this->assertContains('Error', (string) $response->getBody());
     $this->assertContains('Hello world', (string) $response->getBody());
 }
예제 #10
0
 public function __construct()
 {
     $containerBuilder = new ContainerBuilder();
     $containerBuilder->addDefinitions(__DIR__ . '/config.php');
     $container = $containerBuilder->build();
     parent::__construct($container);
 }
예제 #11
0
 /**
  * Configure the DI container.
  */
 private function configureContainer()
 {
     // Build the DI container.
     $builder = new ContainerBuilder();
     $builder->addDefinitions(__DIR__ . '/config/di.php');
     $this->container = $builder->build();
 }
예제 #12
0
 protected function createContainer()
 {
     $builder = new ContainerBuilder();
     $builder->setDefinitionCache(new \Doctrine\Common\Cache\ArrayCache());
     $builder->addDefinitions(dirname(__DIR__) . '/DI/config.php');
     $this->container = $builder->build();
 }
예제 #13
0
파일: App.php 프로젝트: butkimtinh/penny
 /**
  * Container compilation.
  *
  * @param mixed $config Configuration file/array.
  *
  * @link http://php-di.org/doc/php-definitions.html
  *
  * @return ContainerInterface
  */
 private function buildContainer($config)
 {
     $builder = new DI\ContainerBuilder();
     $builder->useAnnotations(true);
     $builder->addDefinitions($config);
     return $builder->build();
 }
예제 #14
0
 private function createOptimizedBuilder()
 {
     $cache = new ArrayCache($this->cacheDir);
     $builder = new ContainerBuilder();
     $builder->setDefinitionCache($cache);
     $builder->addDefinitions(array('bicycle_factory' => \DI\object('PhpBench\\Benchmarks\\Container\\Acme\\BicycleFactory')));
     return $builder;
 }
 public function load(ContainerBuilder $container)
 {
     if (empty($this->sources)) {
         return;
     }
     foreach ($this->sources as $source) {
         $container->addDefinitions($source);
     }
 }
예제 #16
0
 /**
  * Initial setup of DI\ContainerBuilder.
  *
  * @param bool $annotation annotation usage.
  *
  * @return DI\ContainerBuilder
  */
 protected static function initialSetupContainerBuilder($annotation)
 {
     $builder = new DI\ContainerBuilder();
     $builder->useAnnotations($annotation);
     $builder->addDefinitions(['request' => ServerRequestFactory::fromGlobals(), 'response' => DI\object(Response::class), 'http_flow_event' => DI\object(ZendHttpFlowEvent::class)->constructor('bootstrap', DI\get('request'), DI\get('response')), 'event_manager' => DI\object(ZendEvmProxy::class), 'dispatcher' => DI\factory(function ($container) {
         return new Dispatcher($container->get('router'), $container);
     })]);
     return $builder;
 }
예제 #17
0
 /**
  * @param string $token
  * @param string $uri
  */
 public function __construct($token, $uri = 'http://www.ifsistem.com/api/v1')
 {
     $builder = new ContainerBuilder(Container::class);
     $builder->useAnnotations(true);
     $builder->addDefinitions(['sayfa' => \DI\get(SayfaService::class), 'menu' => \DI\get(MenuService::class), 'manset' => \DI\get(MansetService::class), 'haber' => \DI\get(HaberService::class), 'galeri' => \DI\get(GaleriService::class), 'iletisimMesaj' => \DI\get(IletisimMesajService::class), 'site' => \DI\get(SiteService::class), 'sehir' => \DI\get(SehirService::class), 'ilce' => \DI\get(IlceService::class), 'semt' => \DI\get(SemtService::class), 'emlak' => \DI\get(EmlakService::class), 'urun' => \DI\get(UrunService::class), 'kullanici' => \DI\get(KullaniciService::class), 'resim' => \DI\get(ResimService::class), 'reklam' => \DI\get(ReklamService::class), 'siparis' => \DI\get(SiparisService::class), 'sanat' => \DI\get(SanatService::class), 'grup' => \DI\get(GrupService::class), 'reference' => \DI\get(ReferenceService::class), 'api' => function () use($token, $uri) {
         return new ApiService($token, $uri);
     }, ApiService::class => \DI\get('api')]);
     // test
     $this->container = $builder->build();
 }
예제 #18
0
파일: App.php 프로젝트: sheerockoff/marabu
 /**
  * Настраиваем контейнер.
  */
 protected function setContainer()
 {
     $builder = new ContainerBuilder();
     $builder->useAnnotations(false);
     if ($this->options['dependencies']) {
         $builder->addDefinitions($this->options['dependencies']);
     }
     $builder->writeProxiesToFile((bool) $this->options['containerProxy'], is_string($this->options['containerProxy']) ? $this->options['containerProxy'] : sys_get_temp_dir());
     $this->container = $builder->build();
 }
예제 #19
0
파일: App.php 프로젝트: alexgkt/durianphp
 protected function configureContainer(ContainerBuilder $builder)
 {
     //$builder->useAutowiring(false);
     $builder->addDefinitions(__DIR__ . '/settings.php');
     // Services
     $services = [\Doctrine\DBAL\Connection::class => function (ContainerInterface $container) {
         $config = new \Doctrine\DBAL\Configuration();
         $connectionParams = array('dbname' => $container->get('db.name'), 'user' => $container->get('db.user'), 'password' => $container->get('db.pass'), 'host' => $container->get('db.host'), 'port' => $container->get('db.port'), 'charset' => 'utf8', 'driver' => 'pdo_mysql');
         $dbh = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
         return $dbh;
     }, \Psr\Log\LoggerInterface::class => function (ContainerInterface $container) {
         $name = $container->get('logger.name');
         $filepath = $container->get('logger.path');
         $logger = new \Monolog\Logger($name);
         $logger->pushProcessor(new \Monolog\Processor\UidProcessor());
         $logger->pushHandler(new \Monolog\Handler\StreamHandler($filepath, \Monolog\Logger::DEBUG));
         return $logger;
     }];
     $builder->addDefinitions($services);
 }
예제 #20
0
 protected function setUp()
 {
     $config = ['app' => "this is my app", "test" => "prova", "version" => "0.0.1", 'routes' => [['name' => 'hello', 'route' => "--name=", 'short_description' => "Good morning!! This is a beautiful day", "handler" => ['App\\Command\\Hello', 'run']]], "service_manager" => ["invokables" => [], "factories" => []]];
     $builder = new ContainerBuilder();
     $builder->useAnnotations(true);
     $builder->addDefinitions($config);
     $container = $builder->build();
     $configServiceManager = new Config($config['service_manager']);
     $container->set("service_manager", new ServiceManager($configServiceManager));
     $this->application = new Application($config['app'], $config['version'], $config['routes'], Console::getInstance(), new Dispatcher($container));
 }
예제 #21
0
 public function testCorrectInjectionWithExternalContainer()
 {
     $builder = new ContainerBuilder();
     $builder->addDefinitions(Loader::load());
     $builder->useAnnotations(true);
     $app = new App($this->router, $builder->build());
     $request = (new Request())->withUri(new Uri('/load'))->withMethod('GET');
     $response = new Response();
     $response = $app->run($request, $response);
     $this->assertEquals(200, $response->getStatusCode());
     $this->assertEquals('eureka', $response->getBody()->__toString());
 }
예제 #22
0
 /**
  * Returns the dependency injection container
  *
  * @return \DI\Container
  */
 public function getDiContainer()
 {
     if (!$this->diContainer) {
         $builder = new ContainerBuilder();
         //			$builder->setDefinitionCache(new \Doctrine\Common\Cache\ArrayCache());
         $builder->setDefinitionCache(new FilesystemCache(__DIR__ . '/../../var/Cache/'));
         $builder->addDefinitions(__DIR__ . '/../../Classes/Configuration/dependencyInjectionConfiguration.php');
         $this->diContainer = $builder->build();
         //			$this->diContainer = ContainerBuilder::buildDevContainer();
         $this->diContainer->get('Cundd\\PersistentObjectStore\\Event\\SharedEventEmitter');
     }
     return $this->diContainer;
 }
예제 #23
0
 /**
  * Adds or replaces the service definitions in the given Container Builder with the provided services and
  * parameters.
  *
  * @param callable|array|DefinitionSource|string $configuration a list of services and parameters to load as an array or
  *    Definition Source, or a filename where to load a list of services from.
  * @param ContainerBuilder $builder
  *
  * @link http://php-di.org/ for more information on the format of the Service Definition.
  *
  * @return void
  */
 private function loadConfiguration($configuration, ContainerBuilder $builder)
 {
     if (is_callable($configuration)) {
         $configuration = $configuration();
     }
     if ($configuration === null) {
         return;
     }
     if (is_array($configuration)) {
         $configuration = new DefinitionArray($configuration);
     }
     $builder->addDefinitions($configuration);
 }
예제 #24
0
 public function setUp()
 {
     $containerBuilder = new ContainerBuilder();
     $containerBuilder->addDefinitions(__DIR__ . '/../../app/config.php');
     $container = $containerBuilder->build();
     $this->checkRepository = $container->get(CheckRepository::class);
     $this->check = new DatabaseCheck();
     $this->exercise = $this->createMock(DatabaseExerciseInterface::class);
     $this->exercise->expects($this->any())->method('getType')->willReturn(ExerciseType::CLI());
     $this->dbDir = sprintf('%s/PhpSchool_PhpWorkshop_Check_DatabaseCheck', str_replace('\\', '/', realpath(sys_get_temp_dir())));
     $this->assertEquals('Database Verification Check', $this->check->getName());
     $this->assertEquals(DatabaseExerciseCheck::class, $this->check->getExerciseInterface());
 }
예제 #25
0
 /**
  * Returns the dependency injection container
  *
  * @return \DI\Container
  */
 public function getDiContainer()
 {
     if (!$this->diContainer) {
         $builder = new ContainerBuilder();
         //			$builder->setDefinitionCache(new ArrayCache());
         $builder->setDefinitionCache(new FilesystemCache(ConfigurationManager::getSharedInstance()->getConfigurationForKeyPath('cachePath')));
         $this->diContainer = $builder->build();
         $builder->addDefinitions(__DIR__ . '/Configuration/dependencyInjectionConfiguration.php');
         $this->diContainer = $builder->build();
         //			$this->diContainer = ContainerBuilder::buildDevContainer();
     }
     return $this->diContainer;
 }
예제 #26
0
파일: Container.php 프로젝트: jlaso/notify
 /**
  * @throws \Exception
  */
 protected function __construct()
 {
     $builder = new ContainerBuilder();
     $builder->useAutowiring(false);
     $builder->useAnnotations(false);
     $configFile = sprintf(dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/config/' . self::CONFIG_FILE_PATTERN, self::$env);
     if (!file_exists($configFile)) {
         throw new \Exception(sprintf("The config file expected '%s' doesn't exist", $configFile));
     }
     $builder->addDefinitions($configFile);
     $container = $builder->build();
     self::$instance = $container;
 }
 /**
  * Boots the dependency injection container.
  *
  * @param \Domynation\Config\ConfigInterface $config
  * @param \Domynation\Session\SessionInterface $session
  *
  * @return \DI\Container
  */
 private function bootContainer(ConfigInterface $config, SessionInterface $session)
 {
     $builder = new ContainerBuilder();
     $builder->useAnnotations(false);
     // Cache the definitions in production
     if (IS_PRODUCTION) {
         $builder->setDefinitionCache(new ApcuCache());
     }
     // Load all global services
     $builder->addDefinitions(array_merge(require_once __DIR__ . '/Files/container.php', [ConfigInterface::class => $config, SessionInterface::class => $session]));
     // First pass: Instanciate each providers and load their container definitions
     $providers = array_reduce($config->get('providers'), function ($accumulator, $name) use($builder) {
         if (!class_exists($name)) {
             return $accumulator;
         }
         // Instanciate the provider
         $reflection = new \ReflectionClass($name);
         $provider = $reflection->newInstanceArgs();
         // Load the provider's container definitions
         $builder->addDefinitions($provider->registerContainerDefinitions());
         $accumulator[] = $provider;
         return $accumulator;
     });
     // Build the container
     $container = $builder->build();
     // Second pass: Boot each service
     foreach ($providers as $provider) {
         // Start the provider
         $provider->start($container->get(Router::class), $container->get(ViewFactoryInterface::class), $container->get(EventDispatcherInterface::class));
         // Use reflection to get a closure copy of the `boot` method
         $reflection = new \ReflectionClass(get_class($provider));
         $closure = $reflection->getMethod('boot')->getClosure($provider);
         // Let the container inject the dependency needed by the closure
         $container->call($closure);
     }
     return $container;
 }
 /**
  * {@inheritdoc}
  */
 public function init()
 {
     parent::init();
     $environment = Config::getSystemConfig()->get("general")->get("environment");
     // Set up dependency injection container
     $builder = new ContainerBuilder();
     $builder->useAnnotations(true);
     // Configure the container
     $builder->addDefinitions(PIMCORE_WEBSITE_PATH . "/config/container.php");
     if ($environment !== "local") {
         // Use whatever cache Pimcore has configured (if it has one configured) to cache object
         // definitions in the container
         $builder->setDefinitionCache(new PimcoreCache());
     } else {
         // For development, or debugging we don't want to cache the container
         $builder->setDefinitionCache(new ArrayCache());
     }
     $environmentConfigFile = DefinitionFileLocator::getPath($environment);
     $parametersFile = ParametersFileLocator::getPath();
     if (file_exists($environmentConfigFile)) {
         $builder->addDefinitions($environmentConfigFile);
     }
     if (file_exists($parametersFile)) {
         $builder->addDefinitions($parametersFile);
     }
     $container = $builder->build();
     /** @var \Zend_Controller_Dispatcher_Interface $currentDispatcher */
     $currentDispatcher = \Zend_Controller_Front::getInstance()->getDispatcher();
     $dispatcher = new Dispatcher();
     $dispatcher->setContainer($container);
     $dispatcher->setControllerDirectory($currentDispatcher->getControllerDirectory());
     $dispatcher->setDefaultModule($currentDispatcher->getDefaultModule());
     $dispatcher->setDefaultAction($currentDispatcher->getDefaultAction());
     $dispatcher->setDefaultControllerName($currentDispatcher->getDefaultControllerName());
     \Zend_Controller_Front::getInstance()->setDispatcher($dispatcher);
 }
예제 #29
0
 public function register(Application $app)
 {
     $app['di.definitions'] = array();
     $app['di.options'] = array();
     $app['di.default_options'] = array('cache' => null, 'container_class' => 'DI\\Container', 'useAnnotations' => true, 'useAutowiring' => true, 'writeProxiesToFile' => false, 'proxyDirectory' => null, 'silexAliases' => true, 'injectOnControllers' => true);
     $app['di'] = $app->share(function () use($app) {
         $acclimator = new ContainerAcclimator();
         $container = new CompositeContainer();
         $builder = $app['di.builder'];
         $builder->wrapContainer($container);
         $phpdi = $builder->build();
         $phpdi->set('Silex\\Application', $app);
         $container->addContainer($acclimator->acclimate($phpdi));
         $container->addContainer($acclimator->acclimate($app));
         return $container;
     });
     $app['di.builder'] = $app->share(function () use($app) {
         $options = $app['di.options_merged'];
         $builder = new ContainerBuilder($options['container_class']);
         $builder->useAnnotations((bool) $options['useAnnotations']);
         $builder->useAutowiring((bool) $options['useAutowiring']);
         $builder->writeProxiesToFile($options['writeProxiesToFile'], $options['proxyDirectory']);
         if ($options['cache']) {
             $builder->setDefinitionCache($options['cache']);
         }
         $definitions = (array) $app['di.definitions'];
         if ($options['silexAliases']) {
             $definitions[] = __DIR__ . '/config.php';
         }
         foreach ($definitions as $file) {
             $builder->addDefinitions($file);
         }
         return $builder;
     });
     $app['di.raw'] = $app->share(function () use($app) {
         return $app['di']->get($app['di.options_merged']['container_class']);
     });
     $app['di.options_merged'] = $app->share(function () use($app) {
         return array_merge($app['di.default_options'], $app['di.options']);
     });
     $app['resolver'] = $app->share($app->extend('resolver', function ($resolver, $app) {
         if ($app['di.options_merged']['injectOnControllers']) {
             return new PhpDiControllerResolver($app['di.raw'], $resolver);
         }
         return $resolver;
     }));
 }
예제 #30
0
 /**
  * Create service
  *
  * @param ServiceLocatorInterface $serviceLocator
  * @return Container
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     if ($this->container !== null) {
         return $this->container;
     }
     $builder = new ContainerBuilder();
     $config = $this->getConfig($serviceLocator);
     $configFile = $this->getDefinitionsFilePath($config);
     $builder->addDefinitions($configFile);
     $useAnnotations = $this->shouldUseAnnotations($config);
     $builder->useAnnotations($useAnnotations);
     $acclimator = new ContainerAcclimator();
     $zfContainer = $acclimator->acclimate($serviceLocator);
     $builder->wrapContainer($zfContainer);
     /**
      * @var $cache Cache
      */
     $cache = $this->getCache($serviceLocator, $config);
     if ($cache) {
         $builder->setDefinitionCache($cache);
     }
     $this->container = $builder->build();
     return $this->container;
 }