Yii::$app->runAction('new_controller/new_action', $params);
これを使用して、別のコントローラーからコントローラーアクションを呼び出すことができると思います。
別のモジュールにあるコントローラー アクションを呼び出す方法はありますか?
何かのようなもの:
Yii::$app->runAction('/route/to/other/module/new_controller/new_action', $params);
これは可能ですか?
Yii::$app->runAction('new_controller/new_action', $params);
これを使用して、別のコントローラーからコントローラーアクションを呼び出すことができると思います。
別のモジュールにあるコントローラー アクションを呼び出す方法はありますか?
何かのようなもの:
Yii::$app->runAction('/route/to/other/module/new_controller/new_action', $params);
これは可能ですか?
はい、できます。しかし、それはあなたのアーキテクチャに問題があることを示しています。コントローラーに複雑なロジックが含まれている場合、それは悪い習慣です。
コードの共通部分をモデルに移動し、コントローラーでメソッドとして呼び出すことができますか? $this->redirect()または代わりに電話しYii::$app->runAction()ますか?モジュールの強い接続を避けるようにしてください。
更新:
たとえば、このサンプル コードはあまり良くありません。リクエストの初期化を行わないと、アクション内のロジックの単体テストを記述できないためです。これは非常に単純な例です:
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()それが悪いとは言いません。しかし、この方法を使用することは反省する機会です。
これを使ってみてください。
Yii::$app->runAction('checksheet/index', ['param1' => $param1, 'param2' => $param2]);
仕事をしますか
runAction()モジュール内の関数で可能です。ここでドキュメントを確認してください