2017-03-10 3 views
0

Wie kann ich einen Befehl von der Controller-Aktion in der Basisvorlage ausführen?Yii2 Basic: Befehl von Controller-Aktion ausführen

I How to run console command in yii2 from web versucht

Dies schlägt fehl:

public function actionTest(){ 
    $oldApp = \Yii::$app; 
    $console = new \yii\console\Application([ 
     'id' => 'basic-console', 
     'basePath' => '@app/commands', 
     'components' => [ 
      'db' => $oldApp->db, 
     ], 
    ]); 
    \Yii::$app->runAction('hello/index'); 
    \Yii::$app = $oldApp; 
} 

Die oben zeigt mir Unknown command: hello/index Did you mean "help/index"?

dem Befehl:

<?php 
/** 
* @link http://www.yiiframework.com/ 
* @copyright Copyright (c) 2008 Yii Software LLC 
* @license http://www.yiiframework.com/license/ 
*/ 

namespace app\commands; 

use yii\console\Controller; 

/** 
* This command echoes the first argument that you have entered. 
* 
* This command is provided as an example for you to learn how to create console commands. 
* 
* @author Qiang Xue <[email protected]> 
* @since 2.0 
*/ 
class HelloController extends Controller 
{ 
    /** 
    * This command echoes what you have entered as the message. 
    * @param string $message the message to be echoed. 
    */ 
    public function actionIndex($message = 'hello world') 
    { 
     echo $message . "\n"; 

    } 

} 

Bitte um Hilfe!

Antwort

1

Dies geschieht aus zwei Gründen.

  1. Sie haben 'controllerNamespace' nicht auf 'app\commands' gesetzt.
  2. Der Wert 'basePath' ist falsch. Wenn Sie dies vom SiteController aus ausführen, sollte der Wert __DIR__ . '/../'

Ich empfehle, es ein bisschen anders zu machen. Auch hier können sagen, sind Sie es aus SiteController läuft, würde ich es tun, wie folgt:

$config = require(__DIR__ . '/../config/console.php'); 
    $console = new \yii\console\Application($config); 

Auf diese Weise können die gleiche Konfiguration wie bei ./yii hello/index

läuft verwenden werden