2013-03-26 88 views
0

我試圖爲CakePHP應用程序創建一個全局「ServerStatus」標誌。這個想法是我可以切換離線/在線模式進行維護,以便當數據被推送到服務器時,該站點處於脫機狀態。 我有一個JavaScript切換設置,以及重定向,但我遇到的問題是全局變量本身。CakePHP動態全局變量

我試過在bootstrap.php中文件的兩件事情,他們都:

(1)我使用的配置類寫的初始狀態,並 (2)我用$ GLOBALS數組編寫初始值。

當我嘗試並且稍後在切換激活時稍後將狀態更改爲備用(非初始)值時,它無法更改。據我所知,這意味着當我在bootstrap.php中寫入一個全局變量時,它就像一個常量,並且初始值將在稍後覆蓋更改。

撥動是在我的默認佈局default.thtml中一個小的腳本:

<script type="text/javascript"> 

     var charInputs = []; 
     setInterval(clearInputBuffer(), 20000); 

     function keyPressHandler(event) 
     { 
      var currChar = String.fromCharCode(event.charCode); 
      charInputs.push(currChar); 
      //alert(currChar + ' key pressed!'); 


      checkForKeyPhrases(charInputs); 
     } 

     function checkForKeyPhrases(chars) 
     { 
      // Get inputted chars as a sequence 
      var seq = ""; 
      for (var i=0; i < chars.length; i++) 
       seq += chars[i] + ""; 

      // Check for "Maintenance Mode" 
      if (seq == ":maintenance") 
      { 
       alert("Maintenance mode... go!"); 

       <?php 
        if ($GLOBALS['ServerOnline']) 
        { 
         $GLOBALS['status'] = 'down'; 
         $GLOBALS['ServerOnline'] = false; 
        } 
        else 
        { 
         $GLOBALS['status'] = 'up'; 
         $GLOBALS['ServerOnline'] = true; 
        } 
       ?> 

       var temp = '<?php echo $GLOBALS['status']; ?>'; 
       alert('Current Server Status: ' + temp); 

       clearInputBuffer(); 
      } 
      else if (seq.indexOf('clear') > -1) 
       clearInputBuffer(); 
     } 

     function clearInputBuffer() 
     { charInputs = []; } 

    </script> 

在bootstrap.php中,我寫$GLOBALS['ServerOnline'] = true;;但是當警報彈出時,它始終註冊初始值true,並且我看到「down」作爲當前狀態。它永遠不會改變。

如果我正確地解釋這意味着在初始化引導文件中寫入全局覆蓋以後的更改,那麼在哪裏可以爲CakePHP應用程序編寫動態GLOBAL初始值的最佳位置? 如果我錯了,有沒有人看到我失蹤?

感謝您的提前幫助!

回答

0

好吧,那麼。 我相信我遇到的問題是我誤解了PHP和JavaScript的運行方式。 PHP在服務器端加載頁面之前運行,然後完成運行。這意味着我的PHP全局變量是「每執行一次」的變量。 當JavaScript捕獲事件並查看PHP變量時,它只是讀取PHP變量,並且集合代碼已經運行並且不會再運行。

基本上,我混淆了客戶端與服務器端腳本。

這意味着有兩種方式,我可以解決我的問題: (1)使用某種類型的持久存儲,又名一個文件或我檢查和更新,而不是一個腳本變量,或數據庫表 (2)我可以創建一個AJAX請求並將數據發佈到服務器,導致服務器端代碼與數據一起運行。