0

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

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 对带有 echo($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 标准正确构建我的代码方面的帮助,但我想推迟这个问题,直到我解决了这个问题。

任何帮助将不胜感激,我只是试图访问我的模块的参数并根据用户是否启用该特定字段来构建表单值。现在我知道,使用当前代码,性别字段不会放在页面上,这是意料之中的。我要解决的是为什么我在第 10 行使用 get 函数收到错误。$params 可以在课堂外呼应,但不能在课堂内呼应?这对我来说没有意义,似乎是我遇到问题的地方。

4

2 回答 2

1

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

在第 9 行尝试类似的操作(请注意,如果您是真心的,includeGender那么您需要检查您的参数名称!

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

@Lodder 在技术上也是正确的,它应该在一个 helper.php 文件中,它有一个帮助类以遵守 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);
于 2013-02-01T02:09:31.137 回答
0

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

class modSystemValidation {

    function my_function() { 

    }

}

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

modSystemValidation::my_function();

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

于 2013-02-01T02:07:15.873 回答