yii2 Создание консольной команды в модуле (собственной, пользовательской) + команда с подтверждением
Primary tabs
Предположим, что ваш модуль называется 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"; } }
- Log in to post comments
- 7651 reads