From d23e6199257b463450e45251451878f98a238103 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Gertz?= Date: Sun, 8 Dec 2024 05:43:48 +0100 Subject: [PATCH 1/1] Store class and bundle alias as member variables Compute bundle alias through getAlias call on bundle base class Handle command not in a bundle --- Command.php | 65 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/Command.php b/Command.php index 0097d12..ca0e3cc 100644 --- a/Command.php +++ b/Command.php @@ -20,12 +20,39 @@ use Symfony\Component\DependencyInjection\Container; * {@inheritdoc} */ class Command extends BaseCommand { + /** + * Alias string + */ + protected string $alias = ''; + + /** + * Bundle string + */ + protected string $bundle = ''; + /** * {@inheritdoc} */ public function __construct(protected ?string $name = null) { + //Get class + $class = strrchr(static::class, '\\', true); + + //Without command name + if (substr(static::class, -strlen('\\Command')) !== '\\Command') { + $class = strrchr($class, '\\', true); + } + + //Set bundle + $this->bundle = strtolower($class); + + //With full class name + if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) { + //Set alias + $this->alias = call_user_func([$class, 'getAlias']); + } + //Fix name - $this->name = $this->name ?? static::getName(); + $this->name = $this->name ?? static::getName($this->alias); //Call parent constructor parent::__construct($this->name); @@ -44,11 +71,13 @@ class Command extends BaseCommand { } /** + * Return the command name + * * {@inheritdoc} * - * Return the command name + * @param ?string $alias The bundle alias */ - public function getName(): string { + public function getName(?string $alias = null): string { //With namespace if ($npos = strrpos(static::class, '\\')) { //Set name pos @@ -58,17 +87,33 @@ class Command extends BaseCommand { $npos = 0; } + //Set bundle pos + $bpos = strlen(static::class) - $npos; + //With trailing command if (substr(static::class, -strlen('Command'), strlen('Command')) === 'Command') { - //Set bundle pos - $bpos = strlen(static::class) - $npos - strlen('Command'); - //Without bundle - } else { - //Set bundle pos - $bpos = strlen(static::class) - $npos; + //Fix bundle pos + $bpos -= strlen('Command'); + } + + //Without alias + if ($alias === null) { + //Get class + $class = strrchr(static::class, '\\', true); + + //Without command name + if (substr(static::class, -strlen('\\Command')) !== '\\Command') { + $class = strrchr($class, '\\', true); + } + + //With full class name + if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) { + //Set alias + $alias = call_user_func([$class, 'getAlias']); + } } //Return command alias - return RapsysPackBundle::getAlias().':'.strtolower(substr(static::class, $npos, $bpos)); + return ($alias?$alias.':':'').strtolower(substr(static::class, $npos, $bpos)); } } -- 2.41.1