我正在对我们的大型工作应用进行一些重构。这包括将我构建的一些工具(如命令行的模式/种子迁移工具)分离到他们自己的存储库中以供多个应用程序使用。
如果它在控制台/控制器中,它会被拾取。如果我将它们移动到自己的存储库并通过Composer需要它,我如何让Yii知道我何时说Invoke-Expression
,我的意思是转到[CmdletBinding()]
param(
# Other parameters removed for brevity
[string] $MSBuildParameters = ""
)
# Other syntax removed for brevity
$cmd = "& `$MSBuild '$Solution' /p:Configuration=$Configuration /p:Platform=`"$BuildPlatform`" /nologo /m /v:m /nr:false $MSBuildParameters"
Invoke-Expression $cmd
?
答案 0 :(得分:2)
如果你创建一个扩展(当然是通过编辑器加载它),你可以在里面找到Module.php
,它将保存控制台控制器的路径(你可以用你的终端调用)。
我将为common\modules\commander
命名空间编写我的示例,对于供应商扩展,您的命名空间会有所不同,但它以相同的方式适用于所有这些命名空间。
所以我的扩展名
<app>
common
modules
commander
controllers
• TestController.php
• Module.php
我的模块类看起来如下:
namespace common\modules\commander;
use yii\base\Module as BaseModule;
class Module extends BaseModule
{
public $controllerNamespace = 'common\modules\commander\controllers';
public function init()
{
parent::init();
}
}
TestController.php
继承自yii\console\Controller
:
namespace common\modules\commander\controllers;
use yii\console\Controller;
class TestController extends Controller
{
public function actionIndex()
{
echo 123;
}
}
让一切工作的主要部分是在console/config/main.php
设置中注册Module.php
'modules' => [
'commander' => [
'class' => \common\modules\commander\Module::className(),
],
...
],
现在,您可以使用以下命令:
yii commander/test/index
它会打印给你123
,表明一切正常,控制台控制器位于不同的文件夹中!