在Yii的另一个控制器中调用函数

时间:2010-10-26 09:47:42

标签: php oop yii

我在Yii应用程序中创建了2个控制器:默认控制器路径中的FirstController.php和SecondController.php。

FirstController.php:

<?php
 class FirstController extends Controller {
  public static function returnFunc() { return 'OK'; }
}

SecondController.php:

<?php
 class SecondController extends Controller {
  public function exampleFunc() {
     $var = First::returnFunc();
  }
}

当我尝试在SecondController中执行exampleFunc()时,Yii抛出错误:

YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory

同样调用FirstController::returnFunc()不起作用。

我是OOP和Yii框架的新手。有什么问题?

3 个答案:

答案 0 :(得分:11)

我已经解决了这个问题。自动装带器不会加载控制器。

它在config/main.php

'import' => array(
    'application.models.*',
    'application.components.*',
),

所有人都这样做:

'import' => array(
    'application.models.*',
    'application.components.*',
    'application.controllers.*',
),

答案 1 :(得分:4)

class ServiceController extends Controller
{
    public function actionIndex()
    {
        Yii::import('application.controllers.back.ConsolidateController'); // ConsolidateController is another controller in back controller folder
        echo ConsolidateController::test(); // test is action in ConsolidateController



class ServiceController extends Controller
{
    public function actionIndex()
    {   
    Yii::import('application.controllers.back.CservicesController');
    $obj =new CservicesController(); // preparing object
    echo $obj->test(); exit; // calling method of CservicesController

答案 2 :(得分:2)

当你创建一个Yii项目时,你的每个控制器都扩展了Controller类,那个类扩展了内置的Yii类CController。

这很好,因为Controller是应用程序中的一个类(可以在components文件夹中找到)。

如果您希望两个控制器都可以访问某个方法,请将该方法放在Controller类中,因为它们都会扩展它。他们都可以访问。只需确保将其声明为公开或受保护。

相关问题