Nette\DI\ContainerBuilder::getServiceName PHP Method

getServiceName() public method

Converts @service or @\Class -> service name and checks its existence.
public getServiceName ( $arg ) : string
return string of FALSE, if argument is not service name
    public function getServiceName($arg)
    {
        if (!is_string($arg) || !preg_match('#^@[\\w\\\\.][^:]*\\z#', $arg)) {
            return FALSE;
        }
        $service = substr($arg, 1);
        if ($service === self::THIS_SERVICE) {
            $service = $this->currentService;
        }
        if (Strings::contains($service, '\\')) {
            if ($this->classList === FALSE) {
                // may be disabled by prepareClassList
                return $service;
            }
            $res = $this->getByType($service);
            if (!$res) {
                throw new ServiceCreationException("Reference to missing service of type {$service}.");
            }
            return $res;
        }
        $service = isset($this->aliases[$service]) ? $this->aliases[$service] : $service;
        if (!isset($this->definitions[$service])) {
            throw new ServiceCreationException("Reference to missing service '{$service}'.");
        }
        return $service;
    }

Usage Example

Example #1
0
 /**
  * Formats PHP code for class instantiating, function calling or property setting in PHP.
  * @return string
  */
 private function formatStatement(Statement $statement)
 {
     $entity = $statement->getEntity();
     $arguments = $statement->arguments;
     if (is_string($entity) && Strings::contains($entity, '?')) {
         // PHP literal
         return $this->formatPhp($entity, $arguments);
     } elseif ($service = $this->builder->getServiceName($entity)) {
         // factory calling
         return $this->formatPhp('$this->?(?*)', [Container::getMethodName($service), $arguments]);
     } elseif ($entity === 'not') {
         // operator
         return $this->formatPhp('!?', [$arguments[0]]);
     } elseif (is_string($entity)) {
         // class name
         return $this->formatPhp("new {$entity}" . ($arguments ? '(?*)' : ''), [$arguments]);
     } elseif ($entity[0] === '') {
         // globalFunc
         return $this->formatPhp("{$entity['1']}(?*)", [$arguments]);
     } elseif ($entity[0] instanceof Statement) {
         $inner = $this->formatPhp('?', [$entity[0]]);
         if (substr($inner, 0, 4) === 'new ') {
             $inner = "({$inner})";
         }
         return $this->formatPhp("{$inner}->?(?*)", [$entity[1], $arguments]);
     } elseif ($entity[1][0] === '$') {
         // property getter, setter or appender
         $name = substr($entity[1], 1);
         if ($append = substr($name, -2) === '[]') {
             $name = substr($name, 0, -2);
         }
         if ($this->builder->getServiceName($entity[0])) {
             $prop = $this->formatPhp('?->?', [$entity[0], $name]);
         } else {
             $prop = $this->formatPhp($entity[0] . '::$?', [$name]);
         }
         return $arguments ? $this->formatPhp($prop . ($append ? '[]' : '') . ' = ?', [$arguments[0]]) : $prop;
     } elseif ($service = $this->builder->getServiceName($entity[0])) {
         // service method
         return $this->formatPhp('?->?(?*)', [$entity[0], $entity[1], $arguments]);
     } else {
         // static method
         return $this->formatPhp("{$entity['0']}::{$entity['1']}(?*)", [$arguments]);
     }
 }
All Usage Examples Of Nette\DI\ContainerBuilder::getServiceName