예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function offsetGet($id)
 {
     if (!in_array($id, $this->serviceWhiteList)) {
         throw new \LogicException(sprintf('You cannot retrieve services until the app has been booted. Attempting to access %s', $id));
     }
     return $this->container->offsetGet($id);
 }
 public function it_normalizes_expressions($parser, \Pimple $container)
 {
     $container->offsetExists('_normalize')->willReturn(true);
     $container->offsetGet('_normalize')->willReturn(array('foo' => 'bar'));
     $parser->evaluate('foo', array('foo' => 'bar'))->willReturn('bar')->shouldBeCalled();
     $this->normalize('?foo', $container)->shouldReturn('bar');
 }
예제 #3
0
 public function it_creates_a_array_parameter_and_merges_existing_data(Parameter $parameterConf, \Pimple $container)
 {
     $parameterConf->getParameterName()->willReturn('db.options');
     $parameterConf->getParameterValue()->willReturn(array('host' => 'example.org'));
     $parameterConf->getMergeStrategy(Argument::type('array'))->willReturn('array_replace_recursive');
     $parameterConf->mergeExisting()->willReturn(true);
     $container->offsetExists('db.options')->willReturn(true);
     $container->offsetGet('db.options')->willReturn(array('host' => 'localhost', 'user' => 'root', 'password' => 'test'));
     $container->offsetSet('db.options', array('host' => 'example.org', 'user' => 'root', 'password' => 'test'))->shouldBeCalled();
     $container = $this->create($parameterConf, $container);
 }
예제 #4
0
 /**
  * @param \Pimple $app
  *
  * @throws \Doctrine\DBAL\DBALException
  *
  * @api
  *
  * @quality:method [B]
  */
 public function setup(\Pimple $app)
 {
     if (!$app->offsetExists('config') || !isset($app->offsetGet('config')['doctrine'])) {
         return;
     }
     $config = $app->offsetGet('config');
     ConfigResolver::resolve((array) $config['doctrine:dbal']);
     $app['connections'] = $app::share(function () use($config) {
         $connections = new \Pimple();
         foreach ((array) $config['doctrine:dbal:connections'] as $id => $params) {
             $connections->offsetSet($id, DriverManager::getConnection($params));
         }
         return $connections;
     });
     $app['connection'] = $app::share(function (\Pimple $app) use($config) {
         $ids = $app['connections']->keys();
         $default = $config['doctrine:dbal:default_connection'] ?: current($ids);
         return $app['connections'][$default];
     });
 }
예제 #5
0
 public function get($id)
 {
     try {
         return parent::offsetGet($id);
     } catch (\Exception $e) {
         if (extension_loaded('xdebug')) {
             throw new DiException(sprintf('Service error "%s" in file "%s" on line %d >> "%s".', $id, xdebug_call_file(), xdebug_call_line(), $e->getMessage()));
         } else {
             throw new DiException(sprintf('Service error "%s" >> "%s"', $id, $e->getMessage()));
         }
     }
 }
예제 #6
0
 /**
  * @param \Pimple $app
  *
  * @throws \InvalidArgumentException
  *
  * @api
  *
  * @quality:method [B]
  */
 public function setup(\Pimple $app)
 {
     if (!$app->offsetExists('config') || !isset($app->offsetGet('config')['monolog'])) {
         return;
     }
     $config = $app->offsetGet('config');
     $app['loggers'] = $app::share(function (\Pimple $app) use($config) {
         return new LoggerLocator((array) $config['monolog'], $app['app.name']);
     });
     $app['logger'] = $app::share(function (\Pimple $app) {
         return $app['loggers']->getDefaultChannel();
     });
     $app['monolog.bridge'] = $app::share(function (\Pimple $app) {
         return function (OutputInterface $output) use($app) {
             if (class_exists('Symfony\\Bridge\\Monolog\\Handler\\ConsoleHandler') && interface_exists('Symfony\\Component\\EventDispatcher\\EventSubscriberInterface')) {
                 $consoleHandler = new ConsoleHandler($output);
                 /** @var \Monolog\Logger $logger */
                 foreach ($app['loggers'] as $logger) {
                     $logger->pushHandler($consoleHandler);
                 }
             }
         };
     });
 }
예제 #7
0
 public function offsetGet($id)
 {
     if (!$this->offsetExists($id)) {
         $this[$id] = function ($c) use($id) {
             $arr = array('php', 'ini', 'yml', 'json', 'cache');
             $configDir = $c['configDir']();
             foreach ($arr as $v) {
                 $file = $configDir . "/" . $id . "." . $v;
                 if (file_exists($file)) {
                     break;
                 } else {
                     $file = null;
                 }
             }
             \Fobia\Debug\Log::debug(">> autoload config", array($id, $file));
             if (!$file) {
                 trigger_error("Нет автозагрузочной секции конфигурации '{$id}'" . "/{$file}", E_USER_ERROR);
                 return;
             }
             return Utils::loadConfig($file);
         };
     }
     return parent::offsetGet($id);
 }
예제 #8
0
파일: Feather.php 프로젝트: zroger/feather
 /**
  * @inheritdoc
  */
 public function offsetGet($id)
 {
     $value = parent::offsetGet($id);
     return is_string($value) ? $this->resolveString($value) : $value;
 }
예제 #9
0
 public function it_can_normalize_array_access_style(\Pimple $container)
 {
     $container->offsetExists('foo')->willReturn(true);
     $container->offsetGet('foo')->willReturn(array('bar' => 'Hello World'));
     $this->normalize('%foo..bar%', $container)->shouldBe('Hello World');
 }
예제 #10
0
 public function __invoke()
 {
     return $this->pimple->offsetGet($this->serviceId);
 }
예제 #11
0
 function it_delegates_get(\Pimple $pimple)
 {
     $pimple->offsetGet('foo')->shouldBeCalled();
     $this->get('foo');
 }
예제 #12
0
 /**
  * Gets a service by id.
  *
  * @param string $id The service id
  *
  * @return object The service
  */
 public static function get($id)
 {
     return self::$pimple->offsetGet($id);
 }
예제 #13
0
 /**
  * Gets a parameter or an object, first from Pimple, then from the fallback container if it is set.
  *
  * @param string $id The unique identifier for the parameter or object
  *
  * @return mixed The value of the parameter or an object
  *
  * @throws PimpleNotFoundException if the identifier is not defined
  */
 public function offsetGet($id)
 {
     if (!$this->fallbackContainer || $this->mode == self::MODE_STANDARD_COMPLIANT) {
         try {
             return parent::offsetGet($id);
         } catch (\InvalidArgumentException $e) {
             // To respect container-interop, let's wrap the exception.
             throw new PimpleNotFoundException($e->getMessage(), $e->getCode(), $e);
         }
     } elseif ($this->mode == self::MODE_ACT_AS_MASTER) {
         if ($this->nbLoops != 0) {
             if (!array_key_exists($id, $this->values)) {
                 throw new PimpleNotFoundException(sprintf('Identifier "%s" is not defined.', $id));
             }
             $isFactory = is_object($this->values[$id]) && method_exists($this->values[$id], '__invoke');
             return $isFactory ? $this->values[$id]($this->wrappedFallbackContainer) : $this->values[$id];
         } else {
             $this->nbLoops++;
             $instance = $this->fallbackContainer->get($id);
             $this->nbLoops--;
             return $instance;
         }
     } else {
         throw new \Exception("Invalid mode set");
     }
 }
예제 #14
0
 /**
  * Sets a parameter.
  *
  * @param string $name  The parameter name
  * @param mixed  $value The parameter value
  *
  * @api
  */
 public function setParameter($name, $value)
 {
     $config = $this->pimple->offsetGet('config');
     $config[$name] = $value;
     $this->pimple->offsetSet('config', $config);
 }
 public function offsetGet($id)
 {
     $this->assertSetUpHasBeenCalled();
     return parent::offsetGet($id);
 }