はい、できます。しかし、それはあなたのアーキテクチャに問題があることを示しています。コントローラーに複雑なロジックが含まれている場合、それは悪い習慣です。
コードの共通部分をモデルに移動し、コントローラーでメソッドとして呼び出すことができますか? $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()
それが悪いとは言いません。しかし、この方法を使用することは反省する機会です。