从Yii中的控制器调用另一个控制器中的功能

时间:2012-05-23 10:41:10

标签: controller yii

我想从控制器调用另一个控制器中的函数。

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

- >服务器错误
帮我解决一下。

7 个答案:

答案 0 :(得分:8)

您无法直接调用该方法,因为它不是static,因此您必须先创建FirstController的实例。如果您想这样做,请使用CWebApplication::createController

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

但是,不需要从另一个控制器调用方法;这是一个糟糕的代码味道。也许更适合重构代码并将其从控制器中拉出来(可能是模型)。

答案 1 :(得分:1)

' Controller'在调用createController()时不应该使用它,并且在调用函数之前应该取结果的[0]元素

 $process = Yii::app()->createController('First'); //create instance of FirstController
 $process=$process[0];
 $process->test1(); //call function 

答案 2 :(得分:1)

您也可以使用<a href="{$link->getCMSLink('YOUR_PAGE_ID')}">Your Text</a>

答案 3 :(得分:1)

在yii2基本应用程序中,

以下组件将用于调用操作

Yii :: $ app-> runAction('controllername / create',$ params);

答案 4 :(得分:0)

你无法直接调用你的函数:首先创建控制器实例,然后调用函数:

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

$process->test1(); //call function 

答案 5 :(得分:0)

如果test1中的方法FirstController未使用$this,您只需将其设为static。而不是:

public function test1() { return 'OK'; }

将其签名为:

public static function test1() { return 'OK'; }

然后你可以从任何地方调用它:

FirstController::test1();

这一切都取决于你的需求......

答案 6 :(得分:0)

这对我有用,

对于带有$ params = $ patientId,$ appId,$ testIds的PatientController和方法printPublicReport()

    list($patient) = Yii::$app->createController('patients/print-public-report', $postDataAry); 

    $patient->printPublicReport($patientId, $appId, $testIds);