コード例 #1
0
ファイル: XtrService.php プロジェクト: Webapper/silex-xtr
 /**
  * XtrService constructor.
  * @param array $input
  * @param Application $app
  */
 public function __construct(array $input, Application $app)
 {
     $this->app = $app;
     // default services:
     $services = ['i18n_switcher' => 'Webapper\\Xtr\\Services\\I18nSwitcher', 'fallbacks' => 'Webapper\\Xtr\\Services\\Fallbacks', 'distinct' => 'Webapper\\Xtr\\Services\\Distinct'];
     // adding required services
     if (isset($input['services'])) {
         foreach ($input['services'] as $name => $serviceClassName) {
             if (!in_array($serviceClassName, $services)) {
                 if (!is_a($serviceClassName, 'Webapper\\Xtr\\Services\\XtrServiceInterface', true)) {
                     throw new \RuntimeException('XTR service "' . $name . '" seems invalid (not implementing XtrServiceInterface). Remove or fix this service before of running!');
                 }
                 $services[$name] = $serviceClassName;
             }
         }
     }
     // get settings:
     if (isset($input['settings']) and isset($input['settings']['ns_root'])) {
         $this->settings['ns_root'] = $input['settings']['ns_root'];
     }
     if (isset($input['settings']) and isset($input['settings']['disabled'])) {
         $this->settings['disabled'] = $input['settings']['disabled'];
     }
     // adding providers which not disabled:
     foreach ($services as $name => $serviceClassName) {
         if (in_array($name, $this->settings['disabled'])) {
             continue;
         }
         $config = isset($input[$name]) ? $input[$name] : [];
         $this->services[$name] = $serviceClassName;
         $input[$name] = Provider::Create(function (XtrService $c) use($name, $serviceClassName) {
             $service = new $serviceClassName($c['!' . $name], $c);
             return $service;
         })->mutate($config)->share();
     }
     // creating request from globals
     $this->request = Request::createFromGlobals();
     parent::__construct($input);
 }
コード例 #2
0
ファイル: D3ITest.php プロジェクト: Webapper/d3i
 public function testExtendedServiceExtension()
 {
     $d3i = new Container();
     $d3i->extension = Provider::Create(function (Container $c, $s = null) {
         if ($s === null) {
             $service = new Service();
             $service->settings = 'test';
             return $service;
         }
         $s->settings = 'extended';
         return $s;
     })->share();
     $this->assertInstanceOf('Webapper\\D3I\\Provider', $d3i['extension']);
     $this->assertInstanceOf('Webapper\\D3I\\Tests\\Service', $d3i->extension);
     $service1 = $d3i->extension;
     $service2 = $d3i->extension;
     $this->assertSame($service1, $service2);
     $this->assertEquals('test', $service1->settings);
     $d3i->test = Provider::Create(function (Container $c) {
         $service = new Service();
         $service->settings = 'test';
         return $service;
     })->share();
     $d3i->test = $d3i['test']->extend($d3i['extension']);
     $this->assertInstanceOf('Webapper\\D3I\\Provider', $d3i['test']);
     $this->assertInstanceOf('Webapper\\D3I\\Tests\\Service', $d3i->test);
     $service1 = $d3i->test;
     $service2 = $d3i->test;
     $this->assertSame($service1, $service2);
     $this->assertEquals('extended', $service1->settings);
 }