参数“method”为 <data-source> 的 JInput 会导致“致命错误:在非对象上调用成员函数 getString()”

问题描述 投票:0回答:1

我对 Joomla 还很陌生! (以及一般的 PHP)并尝试通过在我本地的 Joomla! 安装上开发一个网站来学习。 我正在使用带有 PHP 5.5.12、Apache 2.4.9 和 Joomla 的 WAMP-Server! 3.6.4.

现在我喜欢从

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

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

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

它不起作用,抱怨

'method'
是一个非对象。 ('致命错误:在非对象上调用成员函数 getString()')

同一列表中的所有其他数据源(例如

'get'
'post'
'cookie'
'request'
等)不会产生任何错误,并且似乎工作完美。

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

'method'
应该做的。

当然,我可以依次使用

'post'
'get'
,但如果有一个选项可以直接执行此操作(更少的开销?和更精简的代码),这对我来说似乎很愚蠢。 我可能必须解决优先级问题,但我们现在先把它放在一边。

https://docs.joomla.org/Retriving_request_data_using_JInput 中唯一提到的超级全局是

'get'
'post'
'server'
。显然,对其他来源只字未提 存在(未发生错误)或使用哪个命名源作为默认值。

我的搜索已经绕了一段时间了,我找不到更多相关信息(针对 Joomla!

JInput
,而不是
PHP
)。 如果我在这里遗漏了一些基本的东西,请随时告诉我。

话虽如此,我的问题现在是:

是否需要进行任何设置(或更新)才能使

'method'
数据源正常工作?

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

感谢您花时间阅读(也许还可以回答)。

php post get joomla3.0
1个回答
0
投票

我终于想通了,感谢@Xorifelse 推动正确的方向。

我的问题的答案是:

1)我是否需要进行任何设置(或更新)才能使“方法”正常工作?


必须以如下方式将一个名为

'_METHOD'
的数组添加到
$GLOBALS
数组中:

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

使用 data-source=

JInput
调用
'method'
然后将返回
$_GET
$_POST
的合并内容,并覆盖
$_POST
$_GET
中的值(如果它们具有相同的键)。


2)

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

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

如果在调用之前新创建和/或填充了该数组,则没关系。因此使用 _GETANDPOST 这样的名称而不是 _第一个问题中的方法可以更好地描述其目的。



但是....

乱搞

JInput

通常被认为是

不好的做法!!



对于每个想知道
$GLOBALS

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


答案可以在

‘魔法方法’

‘属性重载’中找到。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.