我在使用模块的参数执行任何特定操作时遇到问题。我不断从我的代码中收到以下错误:
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)的页面的回声
:{"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() 函数确认这一点。
在任何人回答这个问题之前,这里有一个快速概述:
- 我知道$params被定义
- 我在这里的问题是,我需要一种方法来查看$params并根据其内容做一些事情。
- 虽然我很感激在为 Joomla 标准正确构建代码方面的帮助,但我想推迟到我解决这个问题。
任何帮助将不胜感激,我只是尝试访问我的模块的参数并根据用户是否启用了该特定字段来构建表单值。现在我知道使用当前代码,性别字段不会放在页面上,这是意料之中的。我试图解决的是为什么我在 get 函数的第 10 行出现错误。$params能够在课堂外得到回声,但在课堂内却不能?这对我来说没有意义,似乎是我遇到问题的地方。
在你的$params var_dump()
中,没有includeGender
- 只有一个validateGender
.如果 includeGender
的参数名称不存在 - 那么你将从语句中得到一个 php 致命错误。
在第 9 行尝试这样的事情(请注意,如果您真的是includeGender
那么您需要检查您的参数名称!
if($params->get('validateGender','0') == 1 ) {
同样@Lodder技术上是正确的,这应该在带有帮助程序类的帮助程序.php文件中以遵守Joomla标准 - 而不是作为tpml.php文件中的函数。但是,这不会对编码错误产生影响 - 它只会使您的模块更好地遵守Joomla标准!
更新
洛德有点不对劲——昨晚没有注意到。
在帮助程序.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++;
}
}
}
然后在视图的默认文件中.php然后调用函数,例如
modSystemValidationHelper::buildForm($params);
你应该把所有的函数放在一个帮助程序.php文件中,如下所示:
class modSystemValidation {
function my_function() {
}
}
默认情况下,您可以简单地使用这样的函数.php
modSystemValidation::my_function();
无需使用:global $form , $tabIndex, $params;