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 。调试对你有帮助。

其次,您在安装工具中设置的报告是什么。将其设置为生产,那么它会工作吗?