Compute bundle alias through getAlias call on bundle base class
Handle command not in a bundle
* {@inheritdoc}
*/
class Command extends BaseCommand {
* {@inheritdoc}
*/
class Command extends BaseCommand {
+ /**
+ * Alias string
+ */
+ protected string $alias = '';
+
+ /**
+ * Bundle string
+ */
+ protected string $bundle = '';
+
/**
* {@inheritdoc}
*/
public function __construct(protected ?string $name = null) {
/**
* {@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']);
+ }
+
- $this->name = $this->name ?? static::getName();
+ $this->name = $this->name ?? static::getName($this->alias);
//Call parent constructor
parent::__construct($this->name);
//Call parent constructor
parent::__construct($this->name);
+ * Return the command name
+ *
- * 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
//With namespace
if ($npos = strrpos(static::class, '\\')) {
//Set name pos
+ //Set bundle pos
+ $bpos = strlen(static::class) - $npos;
+
//With trailing command
if (substr(static::class, -strlen('Command'), strlen('Command')) === 'Command') {
//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 RapsysPackBundle::getAlias().':'.strtolower(substr(static::class, $npos, $bpos));
+ return ($alias?$alias.':':'').strtolower(substr(static::class, $npos, $bpos));