我想从控制器调用另一个控制器中的函数。
class FirstController extends Controller {
public function test1() { return 'OK'; }
}
class SecondController extends Controller {
public function callTest1() { First::test1(); }
}
- >服务器错误
帮我解决一下。
答案 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)
以下组件将用于调用操作
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);