3

コントローラーから別のコントローラーの関数を呼び出したい。

class FirstController extends Controller {
      public function test1() { return 'OK'; }
}
class SecondController extends Controller {
      public function callTest1() { First::test1(); }
}

--> サーバー エラー
です。解決するのを手伝ってください。

4

8 に答える 8

8

ではないため、そのメソッドを直接呼び出すことはできません。そのため、 firststaticのインスタンスを作成する必要があります。FirstControllerそれをしたいときは、次を使用しますCWebApplication::createController

// supply appropriate route in place of 'first/index'
list($first) = Yii::app()->createController('first/index');
$first->test1();

ただし、別のコントローラーからメソッドを呼び出す必要はありません。これはコードの悪臭です。おそらく、コードをリファクタリングしてコントローラーから (おそらくモデルに) 引き出す方が適切でしょう。

于 2012-05-23T10:45:49.007 に答える
1

も使用できますYii::$app->runAction()

于 2016-06-07T14:12:24.847 に答える
0

関数を直接呼び出すことはできません。最初にコントローラーのインスタンスを作成してから、関数を呼び出します。

$process = Yii::app()->createController('FirstController'); //create instance of controller

$process->test1(); //call function 
于 2014-11-28T07:30:59.910 に答える
0

ルートに基づいてインスタンスを作成する createController を使用する代わりに、コード経由で呼び出す場合は、おそらく createControllerByID を使用することをお勧めします。

    $first = Yii::$app->createControllerByID('first');
    $first->test1();

test1がパブリック関数であることを確認してください

于 2021-11-06T00:35:29.130 に答える