Hallo,
erstmal vielen Dank für die saugeilen Erweiterungen, super flexibel & umfangreich zu konfigurieren!
Unter Contao 3.5.12 und PHP 7.0.6 erhalte ich jedoch folgenden Fehler (bei aktivierter Fehlerausgabe, ansonsten weißen Bildschirm):
Code:
Fatal error: Cannot use 'String' as class name as it is reserved in [Pfad_zu_Contao]/system/modules/core/library/Contao/String.php on line 28
in folgenden Fällen:
- nach dem Absenden eines Formulars im Frontend und aktivierter Benachrichtigung (also Notification Center), Daten werden gespeichert
- wenn ich mir die gespeicherten Daten im Backend ansehen will und bereits Daten vorhanden sind (also Leads; wenn noch keine Daten gespeichert wurden, wird die Seite normal aufgerufen ("Keine Einträge vorhanden")).
Mit PHP 5.6 funktioniert es.
Inhalt der String.php:
PHP-Code:
<?php
/**
* Contao Open Source CMS
*
* Copyright (c) 2005-2016 Leo Feyer
*
* @license LGPL-3.0+
*/
namespace Contao;
if (version_compare(PHP_VERSION, '7.0', '>=')) {
throw new \RuntimeException(
'The String class cannot be used in PHP ' . PHP_VERSION . '. Use the StringUtil class instead.'
);
}
/**
* Provides a String class for backwards compatibility.
*
* @author Leo Feyer <https://github.com/leofeyer>
*
* @deprecated Use the StringUtil class instead
*/
class String extends \StringUtil
{
/**
* Object instance (Singleton)
* @var \StringUtil
*/
protected static $objInstance;
/**
* Prevent direct instantiation (Singleton)
*
* @deprecated String is now a static class
*/
protected function __construct() {}
/**
* Prevent cloning of the object (Singleton)
*
* @deprecated String is now a static class
*/
final public function __clone() {}
/**
* Return the object instance (Singleton)
*
* @return \String The object instance
*
* @deprecated String is now a static class
*/
public static function getInstance()
{
if (static::$objInstance === null)
{
static::$objInstance = new static();
}
return static::$objInstance;
}
}
Contao Check ist alles grün.
Wenn ich die Fehlermeldung richtig interpretiere, dürfte es nicht an den Erweiterungen, sondern an Contao selbst liegen (der Fehler tritt aber wie geschildert nur im Zusammenhang mit den beiden Erweiterungen auf)?
Bin dankbar für Hinweise, was hier falsch laufen könnte.
Gruß, Jens
EDIT -Lösung-
haste 4.11.4 ist noch nicht PHP7-fit:
Zitat von
Thraile
Die Extension "haste" ist der Übeltäter, hier wird noch die String-Klasse verwendet (Angaben der Fundstellen mit Zeile:Spalte):
Code:
system/modules/haste/library/Haste/Util/StringUtil.php
$strText = \String::decodeEntities($strText); [position 46:20]
$strBuffer = \String::parseSimpleTokens($strText, $arrTokens); [position 59:22]
$strBuffer = \String::restoreBasicEntities($strBuffer); [position 71:22]
Hier einfach \String:: gegen \StringUtil:: austauschen und das sollte es gewesen sein. Es gibt hierfür auch schon einen PR auf Github
https://github.com/codefog/contao-haste/pull/79. In den nächsten Versionen ist das Problem dann wohl Geschichte.
bei Verwendung des Composer:
Zitat von
Thraile
Ach ja, wenn du Composer verwendest änder mal die gleiche Datei unter Composer/vendor/codefog/Contao-haste/....
der grund für die fehlende Meldung in der error.log:
Zitat von
Thraile
Ich habe das mal versucht nachzustellen und einfach mal in der PageRegular-Klasse einen Aufruf der String-Klasse eingebaut. In der Error.log wird wirklich nichts geschrieben, hier scheint irgend etwas mit dem Error-Handling von Contao unter PHP7 nicht ganz rund zu laufen.
Lesezeichen