2009-11-22 80 views
2

我想我可能在這裏犯了一個錯誤。 嘗試在我的控制器中使用時間幫助器中的簡單函數時出現以下錯誤。在視圖中使用相同的函數調用時,不會出現錯誤。CakePHP時間助手問題

下面是控制器的錯誤。 後面跟着失敗的控制器代碼。 隨後是正在工作的視圖代碼。

任何幫助表示讚賞!

錯誤:

通知(8):未定義變量:時間[APP /控制器/ temp_users_controller.php 25行] 碼$檢查時間= $時間> GMT(); 致命錯誤:調用一個成員函數GMT()非對象上在/var/www/studydeck/app/controllers/temp_users_controller.php在線25上

控制器:

類TempUsersController擴展的AppController {

var $name = 'TempUsers'; 
var $scaffold; 
var $components = array('Auth'); 
var $helpers = array('Time'); 

function beforeFilter() { 
    //list of actions that do not need authentication 
    $this->Auth->allow('userCleanUp'); 

} 

//this function will delete TempUser accounts which have not been activated 
function userCleanUp() { 

    $checkTime = $time->gmt(); 
    $this->set('checkTime',$checkTime); 
} 

}

查看:

echo $ time-> gmt();

更新: 我試過$ time = new TimeHelper(); 我收到錯誤 致命錯誤:類「TimeHelper」在/var/www/studydeck/app/controllers/temp_users_controller.php未發現線路23

我有變量$傭工=陣列(「時代」)

也沒有那個echo $ time-> gmt();在視圖中工作而無需在任何地方實例化時間。

回答

3

通常不需要從控制器使用的輔助工具。 您在控制器中分配的數組用於在解析和呈現視圖之前加載和實例化助手類。

要在您的控制器中使用助手,您需要確保文件正確加載(包含),並且您有它的一個實例。你也可以在控制器中靜態地使用它們中的很多,特別是那些不需要訪問控制器對象的幫助器。

Cake爲您提供了一個核心功能,您可以使用它來安全地包含這些文件。它甚至可以處理從自動地加載文件的位置,所以你不需要處理路徑。

一個讓你開始的例子。

<?php 
    class TempUsersController extends AppController 
    { 
     public $name = "TempUsers"; 

     public function userCleanUp(){ 
      // include the time helper 
      App::import('Helper', 'Time'); 
      $time = new TimeHelper; 
      $checkTime = $time->gmt(); 
      $this->set('checkTime',$checkTime); 
     } 
    } 
?> 
1

在此行中:

$checkTime = $time->gmt(); 

的$時間變量沒有定義,並自動設置爲null。錯誤指出它不是一個對象(這是正確的)。你是否正確初始化它?我看不到爲$ time變量完成的任何初始化。

4

幫助者被認爲是在視圖中使用,而不是在控制器中,因此錯誤。如果你真的要使用助手在你的控制器,你必須自己初始化它:

$time = new TimeHelper();