4

Yii::$app->runAction('new_controller/new_action', $params);

これを使用して、別のコントローラーからコントローラーアクションを呼び出すことができると思います。

別のモジュールにあるコントローラー アクションを呼び出す方法はありますか?

何かのようなもの:

Yii::$app->runAction('/route/to/other/module/new_controller/new_action', $params);

これは可能ですか?

4

3 に答える 3

3

はい、できます。しかし、それはあなたのアーキテクチャに問題があることを示しています。コントローラーに複雑なロジックが含まれている場合、それは悪い習慣です。

コードの共通部分をモデルに移動し、コントローラーでメソッドとして呼び出すことができますか? $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()それが悪いとは言いません。しかし、この方法を使用することは反省する機会です。

于 2015-10-08T07:04:31.817 に答える
1

これを使ってみてください。

Yii::$app->runAction('checksheet/index', ['param1' => $param1, 'param2' => $param2]);

仕事をしますか

于 2017-11-28T11:06:24.730 に答える
0

runAction()モジュール内の関数で可能です。ここでドキュメントを確認してください

于 2015-10-08T06:57:00.770 に答える