Nette\DI\ContainerBuilder::addDefinition PHP Method

addDefinition() public method

Adds new service definition.
public addDefinition ( $name, ServiceDefinition $definition = NULL ) : ServiceDefinition
$definition ServiceDefinition
return ServiceDefinition
    public function addDefinition($name, ServiceDefinition $definition = NULL)
    {
        $this->classListNeedsRefresh = TRUE;
        if (!is_string($name) || !$name) {
            // builder is not ready for falsy names such as '0'
            throw new Nette\InvalidArgumentException(sprintf('Service name must be a non-empty string, %s given.', gettype($name)));
        }
        $name = isset($this->aliases[$name]) ? $this->aliases[$name] : $name;
        if (isset($this->definitions[$name])) {
            throw new Nette\InvalidStateException("Service '{$name}' has already been added.");
        }
        if (!$definition) {
            $definition = new ServiceDefinition();
        }
        $definition->setNotifier(function () {
            $this->classListNeedsRefresh = TRUE;
        });
        return $this->definitions[$name] = $definition;
    }

Usage Example

Example #1
0
 private function addWebLoader(\Nette\DI\ContainerBuilder $builder, $name, $config)
 {
     $filesServiceName = $this->prefix($name . 'Files');
     $files = $builder->addDefinition($filesServiceName)->setClass('WebLoader\\FileCollection')->setArguments(array($config['sourceDir']));
     foreach ($config['files'] as $file) {
         // finder support
         if (is_array($file) && isset($file['files']) && (isset($file['in']) || isset($file['from']))) {
             $finder = \Nette\Utils\Finder::findFiles($file['files']);
             unset($file['files']);
             foreach ($file as $method => $params) {
                 call_user_func_array(array($finder, $method), array($params));
             }
             foreach ($finder as $foundFile) {
                 $files->addSetup('addFile', array((string) $foundFile));
             }
         } else {
             $files->addSetup('addFile', array($file));
         }
     }
     $files->addSetup('addRemoteFiles', array($config['remoteFiles']));
     $compiler = $builder->addDefinition($this->prefix($name . 'Compiler'))->setClass('WebLoader\\Compiler')->setArguments(array('@' . $filesServiceName, $config['namingConvention'], $config['tempDir']));
     $compiler->addSetup('setJoinFiles', array($config['joinFiles']));
     foreach ($config['filters'] as $filter) {
         $compiler->addSetup('addFilter', array($filter));
     }
     foreach ($config['fileFilters'] as $filter) {
         $compiler->addSetup('addFileFilter', array($filter));
     }
     // todo css media
 }
All Usage Examples Of Nette\DI\ContainerBuilder::addDefinition