2013-03-26 6 views
0

Я пытаюсь создать глобальный флаг «ServerStatus» для приложения CakePHP. Идея заключается в том, что я могу переключить автономный/онлайн-режим для обслуживания, чтобы при передаче данных на сервер сайт находился в автономном режиме. У меня есть настройка JavaScript, а также перенаправление, но проблема, с которой я столкнулся, находится в самой глобальной переменной.Динамические глобальные переменные CakePHP

Я пробовал две вещи, оба из них в файле bootstrap.php:

(1) Я использовал Настройка класса для записи начального состояния, и (2) Я использовал массив $ GLOBALS для записи начального значения.

Когда я пытаюсь, и позже, измените статус на альтернативное (неисчерпывающее) значение позже, когда переключатель активирован, он не изменится. Насколько я могу судить, это означает, что когда я пишу глобальную переменную в bootstrap.php, она действует как константа, а начальное значение переопределяет изменения позже.

тумблер небольшой скрипт в моем умолчанию Layout default.ctp:

<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, и я вижу «вниз» как текущий статус. Это никогда не меняется.

Если я правильно интерпретирую это, чтобы означать, что запись глобального файла инициализации bootstrap переопределяет последующие изменения, где было бы лучше всего записать динамическое GLOBAL-значение для приложения CakePHP? Если я ошибаюсь, кто-нибудь видит, что мне не хватает?

Спасибо за вашу помощь раньше времени!

ответ

0

Хорошо, так. Я считаю, что проблема связана с тем, что я не понимаю, как работают PHP и JavaScript. PHP работает до того, как страница загружается со стороны сервера, а затем выполняется. Это означает, что мои глобальные переменные PHP являются переменными «за выполнение». К тому времени, как JavaScript улавливает событие и просматривает PHP var, он просто читает переменную PHP, а уже установленный код уже запущен и не запускается снова.

В принципе, я запутываю скрипты клиента и сервера.

Что означает, что есть два способа я могу решить мою проблему: (1) использовать какое-то постоянное хранение, иначе файл или таблицу базы данных, которые я проверяю и обновлять вместо сценария переменного или (2) Я могу сделать запрос AJAX и ПОСЛАТЬ данные на сервер, заставляя код на стороне сервера работать с данными.

Смежные вопросы