TYPO3 Extbase FE-Extension 插件失败:PHP 警告:rawurlencode() 期望参数 1 为字符串,给定的对象
TYPO3 Extbase FE-Extension plugin failing with: PHP Warning: rawurlencode() expects parameter 1 to be string, object given
此问题基于 我的整个 TYPO3 网站都无法正常工作。
现在,在调整 php-version (5.6.17) 后,网站本身可以正常工作,但是我的 extbase 扩展的一个 fe-plugin 不起作用 - 即使它与网站副本上的插件相同一切正常。来自同一扩展的另一个 fe-plugin 直接开箱即用。
每当我调用包含此插件的页面时,前端都会出现以下错误,我不知道从哪里开始寻找原因。
(我在以下错误片段中将我的域更改为 <mydomain>
并将我的插件名称更改为 tx_myfeplugin_nameexte
):
#1: PHP Warning: rawurlencode() expects parameter 1 to be string, object given in /var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php line 1641 (More information)
TYPO3\CMS\Core\Error\Exception thrown in file
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Error/ErrorHandler.php in line 101.
49 TYPO3\CMS\Core\Error\ErrorHandler::handleError(2, "rawurlencode() expects parameter 1 to be string, object given", "/var/www/vhosts/<my-domain>…po3/sysext/core/Classes/Utility/GeneralUtility.php", 1641, array)
48 rawurlencode(TYPO3\CMS\Extbase\Persistence\Generic\QueryResult)
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php:
01639: } else {
01640: if (!$skipBlank || (string)$AVal !== '') {
01641: $str .= '&' . ($rawurlencodeParamName ? rawurlencode($thisKeyName) : $thisKeyName) . '=' . rawurlencode($AVal);
01642: }
01643: }
47 TYPO3\CMS\Core\Utility\GeneralUtility::implodeArrayForUrl("tx_myfeplugin_nameexte", array, "", boolean, boolean)
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php:
01636: $thisKeyName = $name ? $name . '[' . $Akey . ']' : $Akey;
01637: if (is_array($AVal)) {
01638: $str = self::implodeArrayForUrl($thisKeyName, $AVal, $str, $skipBlank, $rawurlencodeParamName);
01639: } else {
01640: if (!$skipBlank || (string)$AVal !== '') {
之前是否有人遇到过同样的错误,或者知道我应该如何解决这个问题?
Thanks to the answer I guess I fixed it, because the error is not appearing any longer, by adding the following lines at line 1707 in file GeneralUtility.php
:
if ($AVal instanceof \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult) {
$AVal = $AVal->toArray();
}
让我们看看来源:
foreach ($theArray as $Akey => $AVal) {
$thisKeyName = $name ? $name . '[' . $Akey . ']' : $Akey;
if (is_array($AVal)) {
$str = self::implodeArrayForUrl($thisKeyName, $AVal, $str, $skipBlank, $rawurlencodeParamName);
} else {
if (!$skipBlank || (string)$AVal !== '') {
$str .= '&' . ($rawurlencodeParamName ? rawurlencode($thisKeyName) : $thisKeyName . '=' . rawurlencode($AVal);
}
}
}
您提供的数组必须是多维数组,因为它代表 url 的各个部分。每个元素都是 testet 是一个数组,所以你可以调试 $AVal 是一个对象而不是一个数组。
我想您之前进行的任何转换都可能有一个 stdObject 。调试对你有帮助。
其次,您在安装工具中设置的报告是什么。将其设置为生产,那么它会工作吗?
此问题基于
现在,在调整 php-version (5.6.17) 后,网站本身可以正常工作,但是我的 extbase 扩展的一个 fe-plugin 不起作用 - 即使它与网站副本上的插件相同一切正常。来自同一扩展的另一个 fe-plugin 直接开箱即用。
每当我调用包含此插件的页面时,前端都会出现以下错误,我不知道从哪里开始寻找原因。
(我在以下错误片段中将我的域更改为 <mydomain>
并将我的插件名称更改为 tx_myfeplugin_nameexte
):
#1: PHP Warning: rawurlencode() expects parameter 1 to be string, object given in /var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php line 1641 (More information)
TYPO3\CMS\Core\Error\Exception thrown in file
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Error/ErrorHandler.php in line 101.
49 TYPO3\CMS\Core\Error\ErrorHandler::handleError(2, "rawurlencode() expects parameter 1 to be string, object given", "/var/www/vhosts/<my-domain>…po3/sysext/core/Classes/Utility/GeneralUtility.php", 1641, array)
48 rawurlencode(TYPO3\CMS\Extbase\Persistence\Generic\QueryResult)
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php:
01639: } else {
01640: if (!$skipBlank || (string)$AVal !== '') {
01641: $str .= '&' . ($rawurlencodeParamName ? rawurlencode($thisKeyName) : $thisKeyName) . '=' . rawurlencode($AVal);
01642: }
01643: }
47 TYPO3\CMS\Core\Utility\GeneralUtility::implodeArrayForUrl("tx_myfeplugin_nameexte", array, "", boolean, boolean)
/var/www/vhosts/<my-domain>/typo3/sysext/core/Classes/Utility/GeneralUtility.php:
01636: $thisKeyName = $name ? $name . '[' . $Akey . ']' : $Akey;
01637: if (is_array($AVal)) {
01638: $str = self::implodeArrayForUrl($thisKeyName, $AVal, $str, $skipBlank, $rawurlencodeParamName);
01639: } else {
01640: if (!$skipBlank || (string)$AVal !== '') {
之前是否有人遇到过同样的错误,或者知道我应该如何解决这个问题?
Thanks to the answer I guess I fixed it, because the error is not appearing any longer, by adding the following lines at line 1707 in file
GeneralUtility.php
:if ($AVal instanceof \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult) { $AVal = $AVal->toArray(); }
让我们看看来源:
foreach ($theArray as $Akey => $AVal) {
$thisKeyName = $name ? $name . '[' . $Akey . ']' : $Akey;
if (is_array($AVal)) {
$str = self::implodeArrayForUrl($thisKeyName, $AVal, $str, $skipBlank, $rawurlencodeParamName);
} else {
if (!$skipBlank || (string)$AVal !== '') {
$str .= '&' . ($rawurlencodeParamName ? rawurlencode($thisKeyName) : $thisKeyName . '=' . rawurlencode($AVal);
}
}
}
您提供的数组必须是多维数组,因为它代表 url 的各个部分。每个元素都是 testet 是一个数组,所以你可以调试 $AVal 是一个对象而不是一个数组。 我想您之前进行的任何转换都可能有一个 stdObject 。调试对你有帮助。
其次,您在安装工具中设置的报告是什么。将其设置为生产,那么它会工作吗?