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
- 8119 reads