gpt4 book ai didi

controller - 从另一个 Controller 调用另一个模块中的 Controller

转载 作者:行者123 更新时间:2023-12-04 01:59:17 33 4
gpt4 key购买 nike

Yii::$app->runAction('new_controller/new_action', $params);
我相信这可以用来从另一个 Controller 调用 Controller Action 。

有没有办法调用驻留在另一个模块中的 Controller 操作?

就像是:
Yii::$app->runAction('/route/to/other/module/new_controller/new_action', $params);
这可能吗?

最佳答案

是的,你可以这么做。但这表明您的体系结构存在问题。当 Controller 包含复杂的逻辑时,这是不好的做法。

也许您可以将代码的公共(public)部分移入模型并在 Controller 中将他作为方法调用?或调用$this->redirect()而是 Yii::$app->runAction() ?尽量避免模块的强连接。

更新:
例如这个示例代码不是很好。因为你不能在没有初始化请求的情况下为 Action 中的逻辑编写单元测试。这是一个非常简单的例子:

class SampleController extends Controller {
public function actionMyAction() {
// do thomething
return $result;
}
}

class SampleRestController extends Controller {
public function actionMyRestAction() {
return \Yii::$app()->runAction("sample/my-action");
}
}

但是你可以这样做:
class MyModel { // 
public function generateResult() {
// do thomething
return $result;
}
}

class SampleController extends Controller {
public function actionMyAction() {
return (new MyModel)->generateResult();
}
}

class SampleRestController extends Controller {
public function actionMyRestAction() {
return (new MyModel)->generateResult();
}
}

在这里您可以调用 MyModel::generateResult()在不同的操作中,您可以轻松地为此方法编写单元测试。您可以在不调用 runAction() 的情况下执行此操作.

我不是说 runAction()不好。但是使用这种方法是反射(reflection)的机会。

关于controller - 从另一个 Controller 调用另一个模块中的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008584/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com