我想从控制器调用另一个控制器中的函数。
class FirstController extends Controller {
public function test1() { return 'OK'; }
}
class SecondController extends Controller {
public function callTest1() { First::test1(); }
}
--> 服务器错误
帮我解决它。
我想从控制器调用另一个控制器中的函数。
class FirstController extends Controller {
public function test1() { return 'OK'; }
}
class SecondController extends Controller {
public function callTest1() { First::test1(); }
}
--> 服务器错误
帮我解决它。
您不能直接调用该方法,因为它不是static
,所以您必须先创建一个实例FirstController
。当您想这样做时,请使用CWebApplication::createController
:
// supply appropriate route in place of 'first/index'
list($first) = Yii::app()->createController('first/index');
$first->test1();
但是,不需要从另一个控制器调用方法;这是一种不好的代码气味。也许重构您的代码并将其从控制器中拉出(也许进入模型)会更合适。
调用 createController() 时不应使用“控制器”一词,并且应在调用函数之前获取结果的 [0] 元素
$process = Yii::app()->createController('First'); //create instance of FirstController
$process=$process[0];
$process->test1(); //call function
在 Yii2 基本应用程序中,以下组件将用于调用动作
Yii::$app->runAction('controllername/create', $params);
您也可以使用Yii::$app->runAction()
.
您不能直接调用您的函数:首先创建控制器实例,然后调用函数:
$process = Yii::app()->createController('FirstController'); //create instance of controller
$process->test1(); //call function
如果test1
您FirstController
的方法没有使用$this
,您可以简单地制作它static
。代替:
public function test1() { return 'OK'; }
签名为:
public static function test1() { return 'OK'; }
然后你可以从任何地方调用它:
FirstController::test1();
这一切都取决于您的需求...
在通过代码调用时,最好使用 createControllerByID,而不是使用基于路由创建实例的 createController。
$first = Yii::$app->createControllerByID('first');
$first->test1();
确保 test1 是公共功能
这对我有用,
对于 PatientController 和方法 printPublicReport(),$params = $patientId, $appId, $testIds
list($patient) = Yii::$app->createController('patients/print-public-report', $postDataAry);
$patient->printPublicReport($patientId, $appId, $testIds);