X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=vendor%2Fdrupal%2Fconsole%2Fsrc%2FCommand%2FContainerDebugCommand.php;h=61519abc2302f0a41fbae57241f967022f6bc6c9;hb=e0411c4e83ba0d079034db83c3f7f55be24a0e35;hp=db128a41a3fd0024126abbe927a3eefd58f4f75c;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/drupal/console/src/Command/ContainerDebugCommand.php b/vendor/drupal/console/src/Command/ContainerDebugCommand.php index db128a41a..61519abc2 100644 --- a/vendor/drupal/console/src/Command/ContainerDebugCommand.php +++ b/vendor/drupal/console/src/Command/ContainerDebugCommand.php @@ -43,6 +43,14 @@ class ContainerDebugCommand extends Command 'service', InputArgument::OPTIONAL, $this->trans('commands.container.debug.arguments.service') + )->addArgument( + 'method', + InputArgument::OPTIONAL, + $this->trans('commands.container.debug.arguments.method') + )->addArgument( + 'arguments', + InputArgument::OPTIONAL, + $this->trans('commands.container.debug.arguments.arguments') ); } @@ -54,6 +62,8 @@ class ContainerDebugCommand extends Command $io = new DrupalStyle($input, $output); $service = $input->getArgument('service'); $parameters = $input->getOption('parameters'); + $method = $input->getArgument('method'); + $args = $input->getArgument('arguments'); if ($parameters) { $parameterList = $this->getParameterList(); @@ -63,25 +73,77 @@ class ContainerDebugCommand extends Command return 0; } - $tableHeader = []; - if ($service) { - $tableRows = $this->getServiceDetail($service); - $io->table($tableHeader, $tableRows, 'compact'); + if ($method) { + $tableHeader = []; + $callbackRow = $this->getCallbackReturnList($service, $method, $args); + $io->table($tableHeader, $callbackRow, 'compact'); return 0; - } + } else { + $tableHeader = []; + if ($service) { + $tableRows = $this->getServiceDetail($service); + $io->table($tableHeader, $tableRows, 'compact'); - $tableHeader = [ - $this->trans('commands.container.debug.messages.service_id'), - $this->trans('commands.container.debug.messages.class_name') - ]; + return 0; + } - $tableRows = $this->getServiceList(); - $io->table($tableHeader, $tableRows, 'compact'); + $tableHeader = [ + $this->trans('commands.container.debug.messages.service_id'), + $this->trans('commands.container.debug.messages.class_name') + ]; + + $tableRows = $this->getServiceList(); + $io->table($tableHeader, $tableRows, 'compact'); + } return 0; } + private function getCallbackReturnList($service, $method, $args) + { + if ($args != null) { + $parsedArgs = json_decode($args, true); + if (!is_array($parsedArgs)) { + $parsedArgs = explode(",", $args); + } + } else { + $parsedArgs = null; + } + $serviceInstance = \Drupal::service($service); + + if (!method_exists($serviceInstance, $method)) { + throw new \Symfony\Component\DependencyInjection\Exception\BadMethodCallException($this->trans('commands.container.debug.errors.method_not_exists')); + + return $serviceDetail; + } + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.service').'', + ''.$service.'' + ]; + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.class').'', + ''.get_class($serviceInstance).'' + ]; + $methods = [$method]; + $this->extendArgumentList($serviceInstance, $methods); + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.method').'', + ''.$methods[0].'' + ]; + if ($parsedArgs) { + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.arguments').'', + json_encode($parsedArgs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) + ]; + } + $return = call_user_func_array([$serviceInstance,$method], $parsedArgs); + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.return').'', + json_encode($return, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) + ]; + return $serviceDetail; + } private function getServiceList() { $services = []; @@ -91,8 +153,13 @@ class ContainerDebugCommand extends Command foreach ($serviceDefinitions as $serviceId => $serviceDefinition) { $services[] = [$serviceId, $serviceDefinition->getClass()]; } + usort($services, [$this, 'compareService']); return $services; } + private function compareService($a, $b) + { + return strcmp($a[0], $b[0]); + } private function getServiceDetail($service) { @@ -101,39 +168,83 @@ class ContainerDebugCommand extends Command if ($serviceInstance) { $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.service'), - $service + ''.$this->trans('commands.container.debug.messages.service').'', + ''.$service.'' ]; $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.class'), - get_class($serviceInstance) - ]; - $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.interface'), - Yaml::dump(class_implements($serviceInstance)) + ''.$this->trans('commands.container.debug.messages.class').'', + ''.get_class($serviceInstance).'' ]; + $interface = str_replace("{ }", "", Yaml::dump(class_implements($serviceInstance))); + if (!empty($interface)) { + $serviceDetail[] = [ + ''.$this->trans('commands.container.debug.messages.interface').'', + ''.$interface.'' + ]; + } if ($parent = get_parent_class($serviceInstance)) { $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.parent'), - $parent + ''.$this->trans('commands.container.debug.messages.parent').'', + ''.$parent.'' ]; } if ($vars = get_class_vars($serviceInstance)) { $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.variables'), - Yaml::dump($vars) + ''.$this->trans('commands.container.debug.messages.variables').'', + ''.Yaml::dump($vars).'' ]; } if ($methods = get_class_methods($serviceInstance)) { + sort($methods); + $this->extendArgumentList($serviceInstance, $methods); $serviceDetail[] = [ - $this->trans('commands.container.debug.messages.methods'), - Yaml::dump($methods) + ''.$this->trans('commands.container.debug.messages.methods').'', + ''.implode("\n", $methods).'' ]; } + } else { + throw new \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException($service); + + return $serviceDetail; } return $serviceDetail; } + private function extendArgumentList($serviceInstance, &$methods) + { + foreach ($methods as $k => $m) { + $reflection = new \ReflectionMethod($serviceInstance, $m); + $params = $reflection->getParameters(); + $p = []; + + for ($i = 0; $i < count($params); $i++) { + if ($params[$i]->isDefaultValueAvailable()) { + $defaultVar = $params[$i]->getDefaultValue(); + $defaultVar = " = ".str_replace(["\n","array ("], ["", "array("], var_export($def, true)).''; + } else { + $defaultVar = ''; + } + if (method_exists($params[$i], 'hasType') && method_exists($params[$i], 'getType')) { + if ($params[$i]->hasType()) { + $defaultType = ''.strval($params[$i]->getType()).' '; + } else { + $defaultType = ''; + } + } else { + $defaultType = ''; + } + if ($params[$i]->isPassedByReference()) { + $parameterReference = '&'; + } else { + $parameterReference = ''; + } + $p[] = $defaultType.$parameterReference.''.'$'.$params[$i]->getName().''.$defaultVar; + } + if ($reflection->isPublic()) { + $methods[$k] = ''.$methods[$k]."(".implode(', ', $p).") "; + } + } + } private function getParameterList() {