// ->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'); $builder->setService('foobar', 'stdClass'); $t->is($builder->getAliases(), array(), '->getAliases() does not return aliased services that have been overridden'); // ->createService() # file $t->diag('->createService() # file'); $builder = new sfServiceContainerBuilder(); $builder->register('foo1', 'FooClass')->setFile(dirname(__FILE__) . '/fixtures/includes/foo.php'); $t->ok($builder->getService('foo1'), '->createService() requires the file defined by the service definition'); $builder->register('foo2', 'FooClass')->setFile(dirname(__FILE__) . '/fixtures/includes/%file%.php'); $builder->setParameter('file', 'foo'); $t->ok($builder->getService('foo2'), '->createService() replaces parameters in the file provided by the service definition'); // ->createService() # class $t->diag('->createService() # class'); $builder = new sfServiceContainerBuilder(); $builder->register('foo1', '%class%'); $builder->setParameter('class', 'stdClass'); $t->ok($builder->getService('foo1') instanceof stdClass, '->createService() replaces parameters in the class provided by the service definition');
$builder->setService('bar', new stdClass()); $t->ok($builder->hasService('bar'), '->hasService() returns true if a service exists'); $builder->setAlias('foobar2', 'foo'); $t->ok($builder->hasService('foobar2'), '->hasService() returns true if a service exists'); // ->getService() $t->diag('->getService()'); $builder = new sfServiceContainerBuilder(); try { $builder->getService('foo'); $t->fail('->getService() throws an InvalidArgumentException if the service does not exist'); } catch (InvalidArgumentException $e) { $t->pass('->getService() throws an InvalidArgumentException if the service does not exist'); } $builder->register('foo', 'stdClass'); $t->ok(is_object($builder->getService('foo')), '->getService() returns the service definition associated with the id'); $builder->setService('bar', $bar = new stdClass()); $t->is($builder->getService('bar'), $bar, '->getService() returns the service associated with the id'); $builder->register('bar', 'stdClass'); $t->is($builder->getService('bar'), $bar, '->getService() returns the service associated with the id even if a definition has been defined'); $builder->register('baz', 'stdClass')->setArguments(array(new sfServiceReference('baz'))); try { @$builder->getService('baz'); $t->fail('->getService() throws a LogicException if the service has a circular reference to itself'); } catch (LogicException $e) { $t->pass('->getService() throws a LogicException if the service has a circular reference to itself'); } $builder->register('foobar', 'stdClass')->setShared(true); $t->ok($builder->getService('bar') === $builder->getService('bar'), '->getService() always returns the same instance if the service is shared'); // ->getServiceIds() $t->diag('->getServiceIds()'); $builder = new sfServiceContainerBuilder();
protected function getDiagramImage($appName) { $dependencyDiagramImage = sprintf('dependency_diagram_%s_%s.png', $appName, time()); $dependencyDiagramImageFullPath = dmOs::join(sfConfig::get('sf_web_dir'), 'cache', $dependencyDiagramImage); $dotFile = tempnam(sys_get_temp_dir(), 'dm_dependency_'); if (!$this->context->getFilesystem()->mkdir(dirname($dependencyDiagramImageFullPath))) { throw new dmException(sprintf('Can not mkdir %s', $dependencyDiagramImageFullPath)); } $configFiles = array(dmOs::join(sfConfig::get('dm_core_dir'), 'config/dm/services.yml'), dmOs::join(dm::getDir(), sprintf('dm%sPlugin/config/dm/services.yml', dmString::camelize($appName)))); $projectFile = dmOs::join(sfConfig::get('sf_config_dir'), 'dm/services.yml'); if (file_exists($projectFile)) { $configFiles[] = $projectFile; } $appFile = dmOs::join(sfConfig::get('sf_apps_dir'), $appName, 'config/dm/services.yml'); if (file_exists($appFile)) { $configFiles[] = $appFile; } $sc = new sfServiceContainerBuilder(); $loader = new sfServiceContainerLoaderFileYaml($sc); $loader->load($configFiles); $sc->setService('dispatcher', $this->context->getEventDispatcher()); $sc->setService('user', $this->context->getUser()); $sc->setService('response', $this->context->getResponse()); $sc->setService('i18n', $this->getI18n()); $sc->setService('routing', $this->context->getRouting()); $sc->setService('config_cache', $this->context->getConfigCache()); $sc->setService('controller', $this->context->getController()); $sc->setService('logger', $this->context->getLogger()); $sc->setService('module_manager', $this->context->getModuleManager()); $sc->setService('context', $this->context); $sc->setService('doctrine_manager', Doctrine_Manager::getInstance()); $dumper = new dmServiceContainerDumperGraphviz($sc); $dumper->enableDispatcherLinks($this->withDispatcherLinks); file_put_contents($dotFile, $dumper->dump(array('graph' => array('overlap' => 'false', 'splines' => 'true', 'epsilon' => '0.5', 'maxiter' => '30000', 'concentrate' => 'false', 'bgcolor' => 'transparent', 'ratio' => 'fill', 'size' => '25,12'), 'node' => array('fontsize' => 20, 'fontname' => 'Arial', 'shape' => 'Mrecord'), 'edge' => array('fontsize' => 9, 'fontname' => 'Arial', 'color' => 'grey', 'arrowhead' => 'open', 'arrowsize' => 1), 'node.instance' => array('fillcolor' => '#ffffff', 'style' => 'filled', 'shape' => 'component'), 'node.definition' => array('fillcolor' => 'transparent'), 'node.missing' => array('fillcolor' => '#ffaaaa', 'style' => 'filled', 'shape' => 'record')))); $filesystem = $this->context->getFileSystem(); //$return = $filesystem->exec(sprintf('dot -Tpng %s > %s', $dotFile, $dependencyDiagramImageFullPath)); //$return = $filesystem->exec(sprintf('twopi -Granksep=5 -Tpng %s > %s', $dotFile, $dependencyDiagramImageFullPath)); $return = $filesystem->exec(sprintf('neato -Tpng %s > %s', $dotFile, $dependencyDiagramImageFullPath)); unlink($dotFile); if (!$return) { $this->getUser()->logError(sprintf('Diem can not generate the %s dependency diagram. Probably graphviz is not installed on the server.', $appName), false); $this->getUser()->logAlert($filesystem->getLastExec('command') . "\n" . $filesystem->getLastExec('output'), false); } return '/cache/' . $dependencyDiagramImage; }