Quantcast
Channel: Live News for Yii Framework
Viewing all articles
Browse latest Browse all 3375

[Wiki] YII2: Create console commands inside a module or extension

$
0
0

Here is a small guide how to get console commands running inside modules & extensions. For this guide I used a fresh yii2 basic application template.

1) Create a new module in your application.
(I named it "example_commands" for this instructions)

Generate new module from commandline with gii (or use gii-webinterface)

command> yii gii/module --moduleID=example_commands --moduleClass=app\modules\example_commands\Module
 
Running 'Module Generator'...
 
The following files will be generated:
        [new] modules\example_commands.php
        [new] modules\controllers\DefaultController.php
        [new] modules\views\default\index.php
 
Ready to generate the selected files? (yes|no) [yes]:y

2) Edit the Module.php
app/modules/example_commands/Module.php

namespace app\modules\example_commands;
 
use Yii;
use yii\base\BootstrapInterface;
use yii\base\Module as BaseModule;
 
class Module extends BaseModule implements BootstrapInterface
{
    public $controllerNamespace = 'app\modules\example_commands\controllers';
 
    public function init()
    {
        parent::init();
    }
 
    public function bootstrap($app)
    {
        if ($app instanceof \yii\console\Application) {
            $this->controllerNamespace = 'app\modules\example_commands\commands';
        }
    }
}
[/code]

3) Create your folder & command class inside your module:
app/modules/example_commands/commands/TestingController.php

namespace app\modules\example_commands\commands;
 
use yii\console\Controller;
use yii\helpers\Console;
 
class TestingController extends Controller
{
    public function actionIndex($message = 'hello world from module')
    {
        echo $message . "\n";
    }
}

4) Add your module to app configurations:
app/config/console.php

'bootstrap' => [
    // ... other bootstrap components ...
    'example_commands'
],
'modules' => [
    // ... other modules ...
    'example_commands' => [
        'class' => 'app\modules\example_commands\Module',
    ],
],

Don't forget app/config/web.php if you have non-console stuff in your module / extension.

5) That was it - you can use your command now like:
moduleId/controller/action

command>yii example_commands/testing/index
hello world from module

Viewing all articles
Browse latest Browse all 3375

Trending Articles