TYPE-0 PERFECT SEIHA
Server Info:
FreeBSD scimitar.blueboard.cz 13.5-STABLE FreeBSD 13.5-STABLE stable/13-4f2925105 GENERIC amd64
Software:
Apache
User:
www
Crot
Crot File
Crot Dir
Crot Command
[LockSelf]
[HOME]
data
www
19068
fszoo_net
www
api
1
root
vendor
nette
di
src
DI
Show Hidden Files
Edit File: /data/www/19068/fszoo_net/www/api/1/root/vendor/nette/di/src/DI/Compiler.php
<?php /** * This file is part of the Nette Framework (https://nette.org) * Copyright (c) 2004 David Grudl (https://davidgrudl.com) */ namespace Nette\DI; use Nette; use Nette\Utils\Validators; /** * DI container compiler. */ class Compiler extends Nette\Object { /** @var CompilerExtension[] */ private $extensions = array(); /** @var ContainerBuilder */ private $builder; /** @var array */ private $config = array(); /** @var string[] of file names */ private $dependencies = array(); /** @var string */ private $className; /** @var array reserved section names */ private static $reserved = array('services' => 1, 'parameters' => 1); public function __construct(ContainerBuilder $builder = NULL) { $this->builder = $builder ?: new ContainerBuilder; } /** * Add custom configurator extension. * @return static */ public function addExtension($name, CompilerExtension $extension) { if (isset($this->extensions[$name]) || isset(self::$reserved[$name])) { throw new Nette\InvalidArgumentException("Name '$name' is already used or reserved."); } $this->extensions[$name] = $extension->setCompiler($this, $name); return $this; } /** * @return array */ public function getExtensions($type = NULL) { return $type ? array_filter($this->extensions, function ($item) use ($type) { return $item instanceof $type; }) : $this->extensions; } /** * @return ContainerBuilder */ public function getContainerBuilder() { return $this->builder; } /** * @return static */ public function setClassName($className) { $this->className = $className; return $this; } /** * Adds new configuration. * @return static */ public function addConfig(array $config) { $this->config = Config\Helpers::merge($config, $this->config); return $this; } /** * Adds new configuration from file. * @return static */ public function loadConfig($file) { $loader = new Config\Loader; $this->addConfig($loader->load($file)); $this->addDependencies($loader->getDependencies()); return $this; } /** * Returns configuration. * @return array */ public function getConfig() { return $this->config; } /** * Adds a files to the list of dependencies. * @return static */ public function addDependencies(array $files) { $this->dependencies = array_merge($this->dependencies, $files); return $this; } /** * Returns the unique list of dependent files. * @return array */ public function getDependencies() { return array_values(array_unique(array_filter($this->dependencies))); } /** * @return Nette\PhpGenerator\ClassType[]|string */ public function compile(array $config = NULL, $className = NULL, $parentName = NULL) { $this->config = $config ?: $this->config; $this->processParameters(); $this->processExtensions(); $this->processServices(); $classes = $this->generateCode($className ?: $this->className, $parentName); return func_num_args() ? implode("\n\n\n", $classes) // back compatiblity : $classes; } /** @internal */ public function processParameters() { if (isset($this->config['parameters'])) { $this->builder->parameters = Helpers::expand($this->config['parameters'], $this->config['parameters'], TRUE); } } /** @internal */ public function processExtensions() { $this->config = Helpers::expand(array_diff_key($this->config, self::$reserved), $this->builder->parameters) + array_intersect_key($this->config, self::$reserved); foreach ($first = $this->getExtensions('Nette\DI\Extensions\ExtensionsExtension') as $name => $extension) { $extension->setConfig(isset($this->config[$name]) ? $this->config[$name] : array()); $extension->loadConfiguration(); } $last = $this->getExtensions('Nette\DI\Extensions\InjectExtension'); $this->extensions = array_merge(array_diff_key($this->extensions, $last), $last); $extensions = array_diff_key($this->extensions, $first); foreach (array_intersect_key($extensions, $this->config) as $name => $extension) { if (isset($this->config[$name]['services'])) { trigger_error("Support for inner section 'services' inside extension was removed (used in '$name').", E_USER_DEPRECATED); } $extension->setConfig($this->config[$name] ?: array()); } foreach ($extensions as $extension) { $extension->loadConfiguration(); } if ($extra = array_diff_key($this->extensions, $extensions, $first)) { $extra = implode("', '", array_keys($extra)); throw new Nette\DeprecatedException("Extensions '$extra' were added while container was being compiled."); } elseif ($extra = key(array_diff_key($this->config, self::$reserved, $this->extensions))) { $hint = Nette\Utils\ObjectMixin::getSuggestion(array_keys(self::$reserved + $this->extensions), $extra); throw new Nette\InvalidStateException( "Found section '$extra' in configuration, but corresponding extension is missing" . ($hint ? ", did you mean '$hint'?" : '.') ); } } /** @internal */ public function processServices() { $this->parseServices($this->builder, $this->config); } /** @internal */ public function generateCode($className, $parentName = NULL) { $this->builder->prepareClassList(); $state = serialize($this->builder->getDefinitions()); foreach ($this->extensions as $extension) { $extension->beforeCompile(); $rc = new \ReflectionClass($extension); $this->dependencies[] = $rc->getFileName(); if ($state !== serialize($this->builder->getDefinitions())) { $this->builder->prepareClassList(); $state = serialize($this->builder->getDefinitions()); } } $classes = $this->builder->generateClasses($className, $parentName); $classes[0]->addMethod('initialize'); $this->addDependencies($this->builder->getDependencies()); foreach ($this->extensions as $extension) { $extension->afterCompile($classes[0]); } return $classes; } /********************* tools ****************d*g**/ /** * Parses section 'services' from (unexpanded) configuration file. * @return void */ public static function parseServices(ContainerBuilder $builder, array $config, $namespace = NULL) { if (!empty($config['factories'])) { throw new Nette\DeprecatedException("Section 'factories' is deprecated, move definitions to section 'services' and append key 'autowired: no'."); } $services = isset($config['services']) ? $config['services'] : array(); $depths = array(); foreach ($services as $name => $def) { $path = array(); while (Config\Helpers::isInheriting($def)) { $path[] = $def; $def = isset($services[$def[Config\Helpers::EXTENDS_KEY]]) ? $services[$def[Config\Helpers::EXTENDS_KEY]] : array(); if (in_array($def, $path, TRUE)) { throw new ServiceCreationException("Circular reference detected for service '$name'."); } } $depths[$name] = count($path); } array_multisort($depths, $services); foreach ($services as $origName => $def) { if ((string) (int) $origName === (string) $origName) { $postfix = $def instanceof Statement && is_string($def->getEntity()) ? '.' . $def->getEntity() : (is_scalar($def) ? ".$def" : ''); $name = (count($builder->getDefinitions()) + 1) . preg_replace('#\W+#', '_', $postfix); } else { $name = ($namespace ? $namespace . '.' : '') . strtr($origName, '\\', '_'); } if ($def === FALSE) { $builder->removeDefinition($name); continue; } $params = $builder->parameters; if (is_array($def) && isset($def['parameters'])) { foreach ((array) $def['parameters'] as $k => $v) { $v = explode(' ', is_int($k) ? $v : $k); $params[end($v)] = $builder::literal('$' . end($v)); } } $def = Helpers::expand($def, $params); if (($parent = Config\Helpers::takeParent($def)) && $parent !== $name) { $builder->removeDefinition($name); $definition = $builder->addDefinition( $name, $parent === Config\Helpers::OVERWRITE ? NULL : unserialize(serialize($builder->getDefinition($parent))) // deep clone ); } elseif ($builder->hasDefinition($name)) { $definition = $builder->getDefinition($name); } else { $definition = $builder->addDefinition($name); } try { static::parseService($definition, $def); } catch (\Exception $e) { throw new ServiceCreationException("Service '$name': " . $e->getMessage(), NULL, $e); } if ($definition->getClass() === 'self' || ($definition->getFactory() && $definition->getFactory()->getEntity() === 'self')) { throw new Nette\DeprecatedException("Replace service definition '$origName: self' with '- $origName'."); } } } /** * Parses single service from configuration file. * @return void */ public static function parseService(ServiceDefinition $definition, $config) { if ($config === NULL) { return; } elseif (is_string($config) && interface_exists($config)) { $config = array('class' => NULL, 'implement' => $config); } elseif ($config instanceof Statement && is_string($config->getEntity()) && interface_exists($config->getEntity())) { $config = array('class' => NULL, 'implement' => $config->getEntity(), 'factory' => array_shift($config->arguments)); } elseif (!is_array($config) || isset($config[0], $config[1])) { $config = array('class' => NULL, 'create' => $config); } if (array_key_exists('factory', $config)) { $config['create'] = $config['factory']; unset($config['factory']); }; $known = array('class', 'create', 'arguments', 'setup', 'autowired', 'dynamic', 'inject', 'parameters', 'implement', 'run', 'tags'); if ($error = array_diff(array_keys($config), $known)) { throw new Nette\InvalidStateException(sprintf("Unknown or deprecated key '%s' in definition of service.", implode("', '", $error))); } $config = self::filterArguments($config); $arguments = array(); if (array_key_exists('arguments', $config)) { Validators::assertField($config, 'arguments', 'array'); $arguments = $config['arguments']; $definition->setArguments($arguments); } if (array_key_exists('class', $config) || array_key_exists('create', $config)) { $definition->setClass(NULL); $definition->setFactory(NULL); } if (array_key_exists('class', $config)) { Validators::assertField($config, 'class', 'string|Nette\DI\Statement|null'); if (!$config['class'] instanceof Statement) { $definition->setClass($config['class']); } $definition->setFactory($config['class'], $arguments); } if (array_key_exists('create', $config)) { Validators::assertField($config, 'create', 'callable|Nette\DI\Statement|null'); $definition->setFactory($config['create'], $arguments); } if (isset($config['setup'])) { if (Config\Helpers::takeParent($config['setup'])) { $definition->setSetup(array()); } Validators::assertField($config, 'setup', 'list'); foreach ($config['setup'] as $id => $setup) { Validators::assert($setup, 'callable|Nette\DI\Statement', "setup item #$id"); $definition->addSetup($setup); } } if (isset($config['parameters'])) { Validators::assertField($config, 'parameters', 'array'); $definition->setParameters($config['parameters']); } if (isset($config['implement'])) { Validators::assertField($config, 'implement', 'string'); $definition->setImplement($config['implement']); $definition->setAutowired(TRUE); } if (isset($config['autowired'])) { Validators::assertField($config, 'autowired', 'bool'); $definition->setAutowired($config['autowired']); } if (isset($config['dynamic'])) { Validators::assertField($config, 'dynamic', 'bool'); $definition->setDynamic($config['dynamic']); } if (isset($config['inject'])) { Validators::assertField($config, 'inject', 'bool'); $definition->addTag(Extensions\InjectExtension::TAG_INJECT, $config['inject']); } if (isset($config['run'])) { $config['tags']['run'] = (bool) $config['run']; } if (isset($config['tags'])) { Validators::assertField($config, 'tags', 'array'); if (Config\Helpers::takeParent($config['tags'])) { $definition->setTags(array()); } foreach ($config['tags'] as $tag => $attrs) { if (is_int($tag) && is_string($attrs)) { $definition->addTag($attrs); } else { $definition->addTag($tag, $attrs); } } } } /** * Removes ... and process constants recursively. * @return array */ public static function filterArguments(array $args) { foreach ($args as $k => $v) { if ($v === '...') { unset($args[$k]); } elseif (is_string($v) && preg_match('#^[\w\\\\]*::[A-Z][A-Z0-9_]*\z#', $v, $m)) { $args[$k] = ContainerBuilder::literal(ltrim($v, ':')); } elseif (is_array($v)) { $args[$k] = self::filterArguments($v); } elseif ($v instanceof Statement) { $tmp = self::filterArguments(array($v->getEntity())); $args[$k] = new Statement($tmp[0], self::filterArguments($v->arguments)); } } return $args; } }
Crotin
Name
Size
Permissions
Modified
User/Group
ContainerFactory.php
4010
0644
2016-01-11 22:53:02
Unknown/Unknown
Compiler.php
12980
0644
2018-07-10 17:51:52
Unknown/Unknown
Config
-
0755
2018-07-10 17:52:42
Unknown/Unknown
Helpers.php
4504
0644
2016-02-27 09:37:54
Unknown/Unknown
exceptions.php
395
0644
2016-01-11 22:53:02
Unknown/Unknown
ServiceDefinition.php
5206
0644
2018-07-10 17:51:52
Unknown/Unknown
ContainerLoader.php
3067
0644
2018-07-10 17:51:52
Unknown/Unknown
Statement.php
1054
0644
2018-07-10 17:51:52
Unknown/Unknown
Container.php
8715
0644
2018-07-10 17:51:52
Unknown/Unknown
Extensions
-
0755
2018-07-10 17:52:41
Unknown/Unknown
PhpReflection.php
5459
0644
2018-07-10 17:51:52
Unknown/Unknown
CompilerExtension.php
2861
0644
2016-01-11 22:53:00
Unknown/Unknown
ContainerBuilder.php
27638
0644
2018-07-10 17:51:52
Unknown/Unknown
NGANU
Rename
Hapus
Chmod
Chown
Touch
Zip
Unzip
Download
Crotin