yii2 Создание консольной команды в модуле (собственной, пользовательской) + команда с подтверждением

Предположим, что ваш модуль называется admin и лежит в папке соответствующей app/modules/admin -- тогда создать из него консольную команду, можно так (приведу пример своих действий):

Конфиг консоли приложения

В папку файл /config/console.php (главный конфиг консоли приложения) добавляем:


.....

'modules' => [//  в эту секцию
        'admin' => [ //  добавляем эту подсекцию
            'class' => 'app\modules\admin\Module',
        ],
    ],
.....

Далее -- в тот же файл, укажем, что хотим подгружать наш модуль при работе в консольном режиме:

    'bootstrap'           => [
        'log',
        'admin'   // идентификатор нашего модуля
     ],

Главный файл модуля (входная точка)

Затем главный файл вашего модуля (/modules/admin/Module.php) должен содержать класс оформленный примерно так:


namespace app\modules\admin;

 
use yii\base\BootstrapInterface;
use yii\base\Module as BaseModule;
 
/**
 * Модуль админки
 */
class Module extends BaseModule implements BootstrapInterface
{
    /**
     * @inheritdoc
     */
    public $controllerNamespace = 'app\modules\admin\commands';

    /**
     * @inheritdoc
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
    
    /**
     * Определяем параметры загрузки модуля
     * 
     * @param \yii\console\Application $app
     */
    public function bootstrap($app)
    {
        if ($app instanceof \yii\console\Application) {
            $this->controllerNamespace = 'app\modules\admin\commands';
        }
    }
}

Файл консольной команды

А файл команды (/modules/admin/commands/RolesController.php) должен иметь вид вроде:


namespace app\modules\admin\commands; 

use yii\helpers\Console;
use yii\console\Controller;


/**
 * Конфигурируем роли и разрешения.
 * @package app\commands
 */
class  RolesController extends Controller
{
    public function actionInit()
    {
        echo 'hello this is command action';
    }
}

Как вызывать команду

Теперь нашу команду можно вызвать так (перейдя в консоли в корень сайта на yii2):

./yii admin/roles/init

Источники:

Команда с подтверждением

Можно создать команду с подтверждением (yes/no).

    public function actionRemoveAll()
    {
        echo "All the authorization data will be removed! Are you sure?(yes/no)\n";
        $line = trim(fgets(STDIN));
        if($line == "yes") {
            $auth = Yii::$app->authManager;
            $auth->removeAll();
            echo "Goodbye all the authorization data!\n";
        }
    }