Skip to content
Snippets Groups Projects
AbstractCommand.php 1.08 KiB
Newer Older
Thomas Flori's avatar
Thomas Flori committed
<?php

namespace App\Command;

use App\Application;
use App\Concerns\WritesToConsole;
use GetOpt\Command;
use GetOpt\GetOpt;
use GetOpt\Option;
use Hugga\Console;
Thomas Flori's avatar
Thomas Flori committed
use Hugga\QuestionInterface;
Thomas Flori's avatar
Thomas Flori committed

abstract class AbstractCommand extends Command
{
    use WritesToConsole;

    /** @var string */
    protected $name = 'unnamed';

    /** @var string */
    protected $description = '';

    /** @var Application */
    protected $app;

    public function __construct(Application $app, Console $console)
    {
        $this->app = $app;
        $this->console = $console;
        parent::__construct($this->name, [$this, 'handle']);
        if (!empty($this->description)) {
            $this->setDescription($this->description);
        }
    }

    abstract public function handle(GetOpt $getOpt): int;
Thomas Flori's avatar
Thomas Flori committed

    /**
     * Ask a simple question or the given question.
     *
     * @param QuestionInterface|string $question
     * @param mixed $default
     * @return mixed
     */
    protected function ask($question, $default = null)
    {
        return $this->console->ask($question, $default);
    }
Thomas Flori's avatar
Thomas Flori committed
}