Joomla 2.5模块问题,PHP致命错误在非对象上调用成员函数get()

时间:2013-02-01 01:38:51

标签: php joomla joomla2.5 joomla-module

我在使用模块的参数执行任何特定操作时遇到问题。我不断从我的代码中收到以下错误:

PHP Fatal error:  Call to a member function get() on a non-object

第10行的以下文件中出现此错误:

<?php
echo($params)
class modSystemValidation {

function buildForm() {
    $form = '';
    $tabIndex = 0;

     if($params->get('includeGender','0') == 1 ) {
        $form .= '<div id="gender"><input type="radio" name="gender" id="gender_m" value="m" tabindex="' . $tabIndex . '" class="label" /><label for="gender_m">Male</label><input type="radio" name="gender" id="gender_f" value="f" tabindex="' . $tabIndex + 1 . '" /><label for="gender_f"></label></div>'; 

        $tabIndex++;
        $tabIndex++;
    }
  }
return $form
}

modSystemValidation::buildForm();

?>

我已经得出结论,这就是带有回声($ params)的页面的params回声:

{"includeFirstName":"1","includeLastName":"1","includeEmail":"1","includePhone":"0","includeAddress1":"0","includeAddress2":"0","includeZip":"0","includeCity":"0","includeState":"0","includeGender":"0","validateFirstName":"0","validateLastName":"0","validateEmail":"0","validatePhone":"0","validateAddress1":"0","validateAddress2":"0","validateZip":"0","validateCity":"0","validateState":"0","validateGender":"0"}

我认为我的问题是$ params变量是一个数组而不是一个对象,但我似乎很难通过is_array()和is_object()函数来确认它。

在任何人回答这个问题之前,请先快速浏览一下:

  1. 我知道定义了$ params
  2. 我的问题是,我需要一种方法来查看$ params并根据其内容做一些事情。
  3. 虽然我很感谢为Joomla标准正确构建代码的帮助,但我想暂时解决这个问题,直到我解决了这个问题。
  4. 我将非常感谢任何帮助,我只是尝试访问模块的参数并根据用户是否启用了该特定字段来构建表单值。现在我知道,使用现有代码,性别字段不会放在页面上,这是预期的。我想解决的是为什么我在第10行使用get函数得到错误。 $ params能够在课堂外回应,但不在其中吗?这对我来说没有意义,似乎是我遇到问题的地方。

2 个答案:

答案 0 :(得分:1)

var_dump() $ params中,没有includeGender - 只有validateGender。如果includeGender的参数名称不存在 - 那么您将从语句中获得php致命错误。

在第9行尝试这样的事情(注意如果你真的是includeGender,那么你需要检查你的参数名称!

if($params->get('validateGender','0') == 1 ) {

另外@Lodder在技术上是正确的,这应该是一个helper.php文件,其中一个helper类符合Joomla标准 - 而不是作为tpml.php文件中的函数。然而,这不会对编码错误产生影响 - 它只会使您的模块更好地遵循Joomla标准!


更新

Lodder有点错误 - 昨晚没有注意到它。

在helper.php文件中,您需要放置函数:

class modSystemValidationHelper {

    function my_function($params) { 
         $form = '';
         $tabIndex = 0;

         if($params->get('includeGender','0') == 1 ) {
              $form .= '<div id="gender"><input type="radio" name="gender" id="gender_m" value="m" tabindex="' . $tabIndex . '" class="label" /><label for="gender_m">Male</label><input type="radio" name="gender" id="gender_f" value="f" tabindex="' . $tabIndex + 1 . '" /><label for="gender_f"></label></div>'; 

              $tabIndex++;
              $tabIndex++;
         }

    }

}

然后在视图的default.php文件中调用函数,例如

 modSystemValidationHelper::buildForm($params);

答案 1 :(得分:0)

您应该将所有函数放在helper.php文件中,如下所示:

class modSystemValidation {

    function my_function() { 

    }

}

你可以在default.php中简单地使用这样的函数

modSystemValidation::my_function();

无需使用:global $form , $tabIndex, $params;