2013-02-26 3 views
0

У меня есть вспомогательный класс Joomla, который я использую для разработки модулей с помощью метода я пытаюсь позвонить:вызова функции внутри класса с модулем Joomla

class modCamcloudReferralHelper 
{ 
     /* 
     * Sanitize email form 
     */ 
     public function isInjected($str) { 
      $inject = "/(\r|\t|%0A|%0D|%08|%09)+/i"; 
      return (preg_match($inject, $str) > 0); 
     } 

     public static function sendEmail() { 


      $jinput = JFactory::getApplication()->input; 

      $email = $jinput->post->get('email', '', 'STRING'); 


      //check email is fine 
      if (isInjected($email)){ //never get into this code and it causes some sort of failure 
       echo "blah"; 
      } 

     } 
} 

просто, правда? Но этот код просто дает мне пустую страницу, и я не вижу никаких ошибок ... нигде. Я могу вместо этого просто поместить этот код прямо в мою sendEmail функцию, и она работает просто отлично:

 $inject = "/(\r|\t|%0A|%0D|%08|%09)+/i"; 
     if (preg_match($inject, $email) > 0){ 
      echo "This works"; 
     } 

У меня была эта проблема с моими компонентами Joomla я построил раньше. По какой-то причине вызов этой функции изнутри одного класса не работает. Это должна быть вещь Joomla ... или я схожу с ума. Есть идеи?

ответ

0

Вы должны вызвать метод со ссылкой на его контейнер, даже если он локальный.

Так правильный синтаксис здесь:

if (self::isInjected($email)) 

из другого класса:

modCamcloudReferralHelper::isInjected(

Это хорошо для помощников: просто убедитесь, что вы объявляете метод, который вы ссылаетесь, как статический

public static function isInjected($str) { 

Если вы вызываете метод в экземпляре класса (вид, шаблон, модель , Вы должны использовать

$this->method() 
+1

Он должен объявить 'isInjected' как статические, прежде чем быть в состоянии сделать это, вы можете добавить, что ваш ответ :) –

+0

Спасибо, обновленный ответ –