2017-02-26 103 views
1

我有一些功能,我想添加到yii\console\controllers\MessageController::actionExtract()Yii2扩展控制台MessageController

所以通常我所做的 - 用我自己的控制器扩展yii控制器,并将其放到app\commands目录中。

<?php 
namespace app\commands; 

class MessageController extends \yii\console\controllers\MessageController{ /* .. */ } 

为了测试目的,我添加了方法名为actionTest

当我做> yii命令,我得到的是

enter image description here

现在我复制粘贴完全相同控制器,只是它重命名为MsgController。先前的控制器保持完好。

所以现在> yii给我

enter image description here


警予消息/测试 - '未知的命令消息/测试'

警予味精/测试 - “OK '


我的应用程序\设置\ console.php有'controllerNamespace' => 'app\commands'

我应该如何正确地延伸MessageController并继续使用标准的警予命令(指不改变控制器的名称有新的命令)?

回答

2

扩展控制器像你这样在控制台配置中添加:

'controllerMap' => [ 
    'message' => 'app\commands\MessageController', 
], 
+0

你能解释一下我们什么时候需要使用'controllerMap'为什么Yii的不*见*同名我的扩展类? – Justinas

+0

控制台应用程序默认为[启用](https://github.com/yiisoft/yii2/blob/2.0.11.2/framework/console/Application.php#L76)核心命令和[maps](https:// github。 com/yiisoft/yii2/blob/2.0.11.2/framework/console/Application.php#L128)它们放在'$ controllerMap'中。当你使用相同的名称添加你的控制器时,它将在地图列表中被覆盖,所以你需要重写它(或者在console \ Application中关闭$ enableCoreCommands)。 – Bizley