2010-10-26 46 views
7

我在我的Yii應用程序中創建了2個控制器:FirstController.php和SecondController.php在默認控制器路徑中。在Yii的另一個控制器中調用函數

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 

調用​​相似不工作。

我是OOP和Yii框架中的newbee。有什麼問題?

+0

http://www.yiiframework.com/forum/index.php/topic/6471-call-another-controllers-action/#entry200141 – 2014-01-31 06:58:03

回答

11

我已經解決了這個問題。自動加載器不加載控制器。

正是在config/main.php

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

這一切工作:

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

跨控制器共享靜態函數的想法標籤:APIWinHTTP控制器是惡。這是組件的用途。 – pestaa 2010-10-26 16:58:14

+1

是的,我會使用一個組件,或者讓兩個控制器都擴展一個具有您希望他們都可以調用的函數的基類。你甚至可以附加一個行爲:http://www.yiiframework.com/doc/guide/1.1/en/basics.component#component-behavior – thaddeusmt 2010-10-28 20:24:29

+0

你可以告訴我你使用哪個版本的codeignitor? – 2013-02-02 08:50:48

2

當你創建一個Yii的項目,每個控制器擴展控制器類,而這個類來擴展內置在Yii類CController中。

這很好,因爲Controller是您的應用程序中的一個類(它可以在components文件夾中找到)。

如果你想要一個方法可以被你的兩個控制器訪問,把這個方法放在Controller類中,並且因爲它們都擴展它。他們都有權訪問。只要確保將其聲明爲公開或受保護。

+0

是的,我認爲這個或者一個變體(用這個函數創建另一個控制器類,並且擴展那個)是要走的路。另外,行爲可以通過附加函數來做你所需要的事情:是的,我會使用一個組件,或者讓兩個控制器擴展一個基類,該基類具有你希望它們都可以調用的函數。你甚至可以附加一個行爲這個函數:http://www.yiiframework.com/doc/guide/1.1/en/basics.component#component-behavior – thaddeusmt 2010-10-28 20:26:30

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 
+3

我得到了以下錯誤:CController :: __構造缺少參數1 (),調用' – shorif2000 2013-07-04 10:44:35

相關問題