Я вижу, что ViewHelperResolver. php фактически загружает FilterViewHelper. php несколько раз. Это может быть ошибкой, но, возможно, я где-то пропускаю что-то, иначе все функции виджетов будут бесполезны в этой изменчивой конфигурации.
PHP Неустранимая ошибка: невозможно объявить класс In2code \ Femanagerextended \ ViewHelper \ Widget \ FilterViewHelper, поскольку имя уже используется в / var / www/typo3v9/typo3conf/ext/femanagerextended/Classes/ViewHelpers/Widget/FilterViewHelper.php в строке 0
из: пространства имен TYPO3Fluid \ Fluid \ Core \ ViewHelper; "ViewHelperResolver. php"
public function resolveViewHelperClassName($namespaceIdentifier, $methodIdentifier)
{
if (!isset($this->resolvedViewHelperClassNames[$namespaceIdentifier][$methodIdentifier])) {
$resolvedViewHelperClassName = $this->resolveViewHelperName($namespaceIdentifier, $methodIdentifier); //<-this line load the class with class_exists autoload. see resolveViewHelperName class (following)
$actualViewHelperClassName = implode('\\', array_map('ucfirst', explode('.', $resolvedViewHelperClassName)));
if (false === class_exists($actualViewHelperClassName) || $actualViewHelperClassName === false) { //<-this attemp reload via class_exists autoload.
throw new ParserException(sprintf(
'The ViewHelper "<%s:%s>" could not be resolved.' . chr(10) .
'Based on your spelling, the system would load the class "%s", however this class does not exist.',
$namespaceIdentifier,
$methodIdentifier,
$resolvedViewHelperClassName
), 1407060572);
}
$this->resolvedViewHelperClassNames[$namespaceIdentifier][$methodIdentifier] = $actualViewHelperClassName;
}
return $this->resolvedViewHelperClassNames[$namespaceIdentifier][$methodIdentifier];
}
protected function resolveViewHelperName($namespaceIdentifier, $methodIdentifier)
{
$explodedViewHelperName = explode('.', $methodIdentifier);
if (count($explodedViewHelperName) > 1) {
$className = implode('\\', array_map('ucfirst', $explodedViewHelperName));
} else {
$className = ucfirst($explodedViewHelperName[0]);
}
$className .= 'ViewHelper';
$namespaces = (array) $this->namespaces[$namespaceIdentifier];
do {
$name = rtrim(array_pop($namespaces), '\\') . '\\' . $className;
} while (!class_exists($name) && count($namespaces)); //<-This load the class via class_exists.
return $name;
}
}
Как я вижу, class_exists - это вызов в функции resolViewHelperName, а затем повторный вызов в вызывающей функции resolViewHelperClassName. Второй вызов class_exists не обнаруживает, что класс уже загружен, и пытается загрузить. Значение имени класса - «In2code \ Femanagerextended \ ViewHelpers \ Widget \ FilterViewHelper».
Вызов класса __autoload происходит из пространства имен SJBR \ StaticInfoTables \ Cache \ CachedClassLoader :: autoload, которые не имеют ничего общего с моим расширение. (не актуально)
Хорошо, решите, что это была ошибка опечатки в пространстве имен FilterViewHelper.