Kdyby\Doctrine\DI\OrmExtension::processMetadataDriver PHP Метод

processMetadataDriver() защищенный Метод

protected processMetadataDriver ( ServiceDefinition $metadataDriver, string $namespace, string | object $driver, string $prefix ) : string
$metadataDriver Nette\DI\ServiceDefinition
$namespace string
$driver string | object
$prefix string
Результат string
    protected function processMetadataDriver(Nette\DI\ServiceDefinition $metadataDriver, $namespace, $driver, $prefix)
    {
        if (!is_string($namespace) || !Strings::match($namespace, '#^' . self::PHP_NAMESPACE . '\\z#')) {
            throw new Nette\Utils\AssertionException("The metadata namespace expects to be valid namespace, {$namespace} given.");
        }
        $namespace = ltrim($namespace, '\\');
        if (is_string($driver) || is_array($driver)) {
            $paths = is_array($driver) ? $driver : [$driver];
            foreach ($paths as $path) {
                if (($pos = strrpos($path, '*')) !== FALSE) {
                    $path = substr($path, 0, $pos);
                }
                if (!file_exists($path)) {
                    throw new Nette\Utils\AssertionException("The metadata path expects to be an existing directory, {$path} given.");
                }
            }
            $driver = new Statement(self::ANNOTATION_DRIVER, is_array($paths) ? $paths : [$paths]);
        }
        $impl = $driver instanceof \stdClass ? $driver->value : ($driver instanceof Statement ? $driver->getEntity() : (string) $driver);
        list($driver) = CacheHelpers::filterArgs($driver);
        /** @var Statement $driver */
        /** @var string $impl */
        if (isset($this->metadataDriverClasses[$impl])) {
            $driver = new Statement($this->metadataDriverClasses[$impl], $driver->arguments);
        }
        if (is_string($driver->getEntity()) && substr($driver->getEntity(), 0, 1) === '@') {
            $metadataDriver->addSetup('addDriver', [$driver->getEntity(), $namespace]);
            return $driver->getEntity();
        }
        if ($impl === self::ANNOTATION_DRIVER) {
            $driver->arguments = [Nette\Utils\Arrays::flatten($driver->arguments), 2 => $this->prefix('@cache.' . $prefix . '.metadata')];
        }
        $serviceName = $this->prefix($prefix . '.driver.' . str_replace('\\', '_', $namespace) . '.' . str_replace('\\', '_', $impl) . 'Impl');
        $this->getContainerBuilder()->addDefinition($serviceName)->setClass('Doctrine\\Common\\Persistence\\Mapping\\Driver\\MappingDriver')->setFactory($driver->getEntity(), $driver->arguments)->setAutowired(FALSE)->setInject(FALSE);
        $metadataDriver->addSetup('addDriver', ['@' . $serviceName, $namespace]);
        return '@' . $serviceName;
    }