2013-05-15 52 views
0

這裏有個奇怪的問題。使用Yii框架我有下面的類Yii:在自定義類中運行方法時出現意外調用CHttpSession :: close

class HtmlTableUi 
{ 
    public function __construct(CWebModule &$module,$data,$actions) 
    { 
    //...code goes here... 
    } 

    protected function renderTable() 
    { 
    //... code goes here ... 
    } 
} 

我可以從HtmlTableUi的實例在SchedulerModule類,這是一個單獨的應用程序模塊中的主類調用HtmlTableUi :: renderTable()。我SchedulerModule.php文件:

<?php 

Yii::import('scheduler.components.HtmlTableUi'); 

class SchedulerModule extends CWebModule 
{ 
    public function init() 
    { 
     parent::init(); 
    } 

    public function beforeControllerAction($controller, $action) 
    { 
     return true; 
    } 


    public function printUI($data,$actions,$submitPath) 
     { 
     $ui = new HtmlTableUi($this,$data,$actions,$submitPath); 
     $ui->renderTable(); 
    } 
} 

這裏談到棘手的部分 - 當我從視圖(的index.php)這樣

<?php 
    $this->module->printUI($casino,$actions,null); 
?> 

代碼流調用SchudulerModule :: printUI經過SchudulerModule :: printUI,直到renderTable被調用($ ui-> renderTable();),而是在該方法的主體內的第一行,它違背任何邏輯和規則,出人意料地跳轉到CHttpSession ::關閉 !!?

通知的調用堆棧之前調用renderTable

protected/modules/scheduler/SchedulerModule.php.SchedulerModule->printUI:153  
protected/modules/scheduler/views/default/index.php.require:21 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CBaseController.php.CBaseController->renderInternal:127 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CBaseController.php.CBaseController->renderFile:96 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CController.php.CController->renderPartial:870 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CController.php.CController->render:783 
protected/modules/scheduler/controllers/DefaultController.php.DefaultController->actionIndex:57 

後:

/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CHttpSession.php.CHttpSession->close:134  
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CHttpSession.php.SchedulerModule->printUI:0 
protected/modules/scheduler/views/default/index.php.require:21 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CBaseController.php.CBaseController->renderInternal:127 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CBaseController.php.CBaseController->renderFile:96 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CController.php.CController->renderPartial:870 
/home/default/workspace/src/vlt/web/yii-1.1.12.b600af/framework/web/CController.php.CController->render:783 
protected/modules/scheduler/controllers/DefaultController.php.DefaultController->actionIndex:57 

有沒有人有類似的問題?任何人都可以解釋這種行爲

回答

0

我找到了解決方案! renderTable的訪問修飾符應該是public,而不是保護。 Yii框架中的這個錯誤會導致意外的運行時行爲而不是編譯錯誤。

+0

您發佈了調用堆棧,並且您的錯誤消息是? – 2013-05-15 09:31:40

+0

沒有錯誤信息,沒有任何東西......就像一切工作正常,除了應用程序的意外行爲。 – 0xC0DEGURU

+0

也許你沒有'error_reporting'或'display_errors'設置爲'off',php應該顯示訪問受保護方法的錯誤。 'CHttpSession'' close'也會被錯誤調用。 – 2013-05-15 12:44:13

相關問題