class ServicePass in Devel 8
Same name and namespace in other branches
- 8.3 webprofiler/src/Compiler/ServicePass.php \Drupal\webprofiler\Compiler\ServicePass
- 8.2 webprofiler/src/Compiler/ServicePass.php \Drupal\webprofiler\Compiler\ServicePass
- 4.x webprofiler/src/Compiler/ServicePass.php \Drupal\webprofiler\Compiler\ServicePass
Class ServicePass
Hierarchy
- class \Drupal\webprofiler\Compiler\ServicePass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface
Expanded class hierarchy of ServicePass
1 file declares its use of ServicePass
- WebprofilerServiceProvider.php in webprofiler/
src/ WebprofilerServiceProvider.php
File
- webprofiler/
src/ Compiler/ ServicePass.php, line 13
Namespace
Drupal\webprofiler\CompilerView source
class ServicePass implements CompilerPassInterface {
/**
* {@inheritdoc}
*/
public function process(ContainerBuilder $container) {
if (FALSE === $container
->hasDefinition('webprofiler.services')) {
return;
}
$definition = $container
->getDefinition('webprofiler.services');
$graph = $container
->getCompiler()
->getServiceReferenceGraph();
$definition
->addMethodCall('setServices', [
$this
->extractData($container, $graph),
]);
}
/**
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
* @param \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraph $graph
*
* @return array
*/
private function extractData(ContainerBuilder $container, ServiceReferenceGraph $graph) {
$data = [];
foreach ($container
->getDefinitions() as $id => $definition) {
$inEdges = [];
$outEdges = [];
if ($graph
->hasNode($id)) {
$node = $graph
->getNode($id);
/** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
foreach ($node
->getInEdges() as $edge) {
/** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
$edgeValue = $edge
->getValue();
$inEdges[] = [
'id' => $edge
->getSourceNode()
->getId(),
'invalidBehavior' => $edgeValue ? $edgeValue
->getInvalidBehavior() : NULL,
];
}
/** @var \Symfony\Component\DependencyInjection\Compiler\ServiceReferenceGraphEdge $edge */
foreach ($node
->getOutEdges() as $edge) {
/** @var \Symfony\Component\DependencyInjection\Reference $edgeValue */
$edgeValue = $edge
->getValue();
$outEdges[] = [
'id' => $edge
->getDestNode()
->getId(),
'invalidBehavior' => $edgeValue ? $edgeValue
->getInvalidBehavior() : NULL,
];
}
}
if ($definition instanceof Definition) {
$class = $definition
->getClass();
try {
$reflectedClass = new \ReflectionClass($class);
$file = $reflectedClass
->getFileName();
} catch (\ReflectionException $e) {
$file = NULL;
}
$tags = $definition
->getTags();
$public = $definition
->isPublic();
$synthetic = $definition
->isSynthetic();
}
else {
$id = $definition
->__toString();
$class = NULL;
$file = NULL;
$tags = [];
$public = NULL;
$synthetic = NULL;
}
$data[$id] = [
'inEdges' => $inEdges,
'outEdges' => $outEdges,
'value' => [
'class' => $class,
'file' => $file,
'id' => $id,
'tags' => $tags,
'public' => $public,
'synthetic' => $synthetic,
],
];
}
return $data;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ServicePass:: |
private | function | ||
ServicePass:: |
public | function | You can modify the container here before it is dumped to PHP code. |