JInput with parameter 'method' as <data-source> results in 'Fatal error: Call to a member function getString() on a non-object'

JInput with parameter 'method' as <data-source> results in 'Fatal error: Call to a member function getString() on a non-object'

我是 Joomla 的新手! (通常 PHP)并尝试通过在本地 Joomla 上开发网站来学习!-安装。 我将 WAMP-Server 与 PHP 5.5.12、Apache 2.4.9 和 Joomla 一起使用! 3.6.4.

现在我想从 $_POST$_GET 中检索数据。两者都同样不安全,因此将它们一起检索和处理是合乎逻辑的。

根据这篇文章 https://docs.joomla.org/Secure_coding_guidelines#Secure_strings 我应该可以这样做:

$string = JFactory::getApplication()->input->method->getString( 'myText', '' );

没用,抱怨'method'不是对象。 ('Fatal error: Call to a member function getString() on a non-object')

同一列表中的所有其他数据源(例如 'get''post''cookie''request' 等)不会产生任何错误,而且看起来完美工作。

不幸的是,我需要从 $_POST 或 $_GET(或两者,但没有 $_COOKIE)检索数据,这正是 data-source='method' 应该做的。

当然我可以按顺序使用 'post''get',但是如果有一个选项可以直接执行它(更少的开销?和更精简的代码),那对我来说似乎很愚蠢。 比起我可能必须解决优先级问题,但让我们暂时把它放在一边。

https://docs.joomla.org/Retrieving_request_data_using_JInput 中提到的唯一 Super-Global- 是 'get''post''server'。显然没有提到其他来源 存在(未发生错误)或指定来源中的一个被用作默认值。

我的搜索已经绕了一段时间了,我找不到更多相关信息(针对 Joomla!JInput,而不是 PHP)。 如果我在这里遗漏了一些基本知识,请随时告诉我。

说到这里我的问题现在是:

我必须进行任何设置(或更新)才能使 'method'-数据源正常工作吗?

JInput 中的数据源是否有另一个值 (!='method') 可用于直接从 $_POST 中检索数据 或 $_GET 或者我是否需要依次调用 'post''get' 来完成此操作(可能 'method' 由于名称冲突而被重命名)?

感谢您抽出时间阅读(也许还会回答)。

我终于弄明白了,感谢@Xorifelse 向正确的方向推进。

我的问题的答案是:

1) 我必须进行任何设置(或更新)才能使 'method'- 正常工作吗?


必须以如下方式将名为 '_METHOD' 的数组添加到 $GLOBALS 数组:

$GLOBALS['_METHOD'] = array_merge($_GET,$_POST);

调用 JInput with data-source='method' 然后 return $_GET$_POST 的合并内容, $_POST 覆盖 $_GET 中的值,如果它们具有相同的键。


2) JInput 中的数据源是否有另一个值 (!='method') 可以使用...?

$GLOBALS 数组中的每个现有数组(名字以下划线 ('_') 字符开头且仅包含大写字符)都可以通过调用 JInput 和数据来使用-source 是该数组的名称(没有前导下划线)。

如果一个新创建的 and/or 在 JInput 调用之前填充该数组并不重要。所以使用像 _GETANDPOST 这样的名字而不是 第一个问题中的 _METHOD 会更好地描述其目的。


但是....

乱用$GLOBALS通常被认为是不好的做法!!


对于每个想知道 JInput 中数据源的这些值如何工作以及为什么它们看起来可以像方法一样被调用的人 即使它们不是方法:

答案可以在'magic methods''property overloading'.

中找到

https://secure.php.net/manual/en/language.oop5.magic.php

https://secure.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members