try { $loader->load('foo'); $t->fail('->load() throws a LogicException if no container is attached to the loader'); } catch (LogicException $e) { $t->pass('->load() throws a LogicException if no container is attached to the loader'); } $loader->setServiceContainer($container = new sfServiceContainerBuilder(array('bar' => 'foo'))); $loader->load(array(array(), array('foo' => 'bar'))); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'bar'), '->load() merges current parameters with the loaded ones'); $loader->setServiceContainer($container = new sfServiceContainerBuilder(array('bar' => 'foo', 'foo' => 'baz'))); $loader->load(array(array(), array('foo' => 'bar'))); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'baz'), '->load() does not change the already defined parameters'); $loader->setServiceContainer($container = new sfServiceContainerBuilder(array('bar' => 'foo'))); $loader->load(array(array(), array('foo' => '%bar%'))); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'foo'), '->load() evaluates the values of the parameters towards already defined ones'); $loader->setServiceContainer($container = new sfServiceContainerBuilder(array('bar' => 'foo'))); $loader->load(array(array(), array('foo' => '%bar%', 'baz' => '%foo%'))); $t->is($container->getParameters(), array('bar' => 'foo', 'foo' => 'foo', 'baz' => 'foo'), '->load() evaluates the values of the parameters towards already defined ones'); $loader->setServiceContainer($container = new sfServiceContainerBuilder()); $container->register('foo', 'FooClass'); $container->register('bar', 'BarClass'); $loader->load(array(array('baz' => new sfServiceDefinition('BazClass'), 'alias_for_foo' => 'foo'), array())); $t->is(array_keys($container->getServiceDefinitions()), array('foo', 'bar', 'baz'), '->load() merges definitions already defined ones'); $t->is($container->getAliases(), array('alias_for_foo' => 'foo'), '->load() registers defined aliases'); $loader->setServiceContainer($container = new sfServiceContainerBuilder()); $container->register('foo', 'FooClass'); $loader->load(array(array('foo' => new sfServiceDefinition('BazClass')), array())); $t->is($container->getServiceDefinition('foo')->getClass(), 'BazClass', '->load() overrides already defined services'); $loader->setServiceContainer($container = new sfServiceContainerBuilder()); $loader->load(array(array(), array('foo' => 'bar')), array(array(), array('bar' => 'foo'))); $t->is($container->getParameters(), array('foo' => 'bar', 'bar' => 'foo'), '->load() accepts several resources as argument');
public function getServiceDefinition($id) { if (empty($this->definitions[$id]) && preg_match('/^([A-Za-z0-9_]+)Table$/', $id, $regs)) { $class = ucfirst($id); if (class_exists($class, true) && is_subclass_of($class, 'Am_Table')) { $def = clone $this->getServiceDefinition('TABLE'); $def->setClass($class); return $def; } } if (empty($this->definitions[$id]) && preg_match('/^([A-Za-z0-9_]+)Record$/', $id, $regs)) { $class = ucfirst($regs[1]); if (class_exists($class, true) && is_subclass_of($class, 'Am_Record')) { $def = clone $this->getServiceDefinition('RECORD'); $def->setClass($class); $def->addArgument(new sfServiceReference($regs[1] . 'Table')); return $def; } } return parent::getServiceDefinition($id); }
$t->is($builder->getServiceDefinition('foobar'), $foo, '->getServiceDefinition() returns a service definition if defined'); $t->ok($builder->setServiceDefinition('foobar', $foo = new sfServiceDefinition('FooBarClass')) === $foo, '->setServiceDefinition() implements a fuild interface by returning the service reference'); $builder->addServiceDefinitions($defs = array('foobar' => new sfServiceDefinition('FooBarClass'))); $t->is($builder->getServiceDefinitions(), array_merge($definitions, $defs), '->addServiceDefinitions() adds the service definitions'); try { $builder->getServiceDefinition('baz'); $t->fail('->getServiceDefinition() throws an InvalidArgumentException if the service definition does not exist'); } catch (InvalidArgumentException $e) { $t->pass('->getServiceDefinition() throws an InvalidArgumentException if the service definition does not exist'); } // ->register() $t->diag('->register()'); $builder = new sfServiceContainerBuilder(); $builder->register('foo', 'FooClass'); $t->ok($builder->hasServiceDefinition('foo'), '->register() registers a new service definition'); $t->ok($builder->getServiceDefinition('foo') instanceof sfServiceDefinition, '->register() returns the newly created sfServiceDefinition instance'); // ->setAlias() $t->diag('->setAlias()'); $builder = new sfServiceContainerBuilder(); $builder->register('foo', 'stdClass'); $builder->setAlias('bar', 'foo'); $t->ok($builder->hasService('bar'), '->setAlias() defines a new service'); $t->ok($builder->getService('bar') === $builder->getService('foo'), '->setAlias() creates a service that is an alias to another one'); // ->getAliases() $t->diag('->getAliases()'); $builder = new sfServiceContainerBuilder(); $builder->setAlias('bar', 'foo'); $builder->setAlias('foobar', 'foo'); $t->is($builder->getAliases(), array('bar' => 'foo', 'foobar' => 'foo'), '->getAliases() returns all service aliases'); $builder->register('bar', 'stdClass'); $t->is($builder->getAliases(), array('foobar' => 'foo'), '->getAliases() does not return aliased services that have been overridden');