{"issue":{"created_at":"2011-11-29T20:02:06Z","state":"open","updated_at":"2011-11-29T20:02:20Z","user":{"gravatar_id":"256406243346b9253f8610fb1d1e05f6","id":1215373,"url":"https://api.github.com/users/importer","avatar_url":"https://secure.gravatar.com/avatar/256406243346b9253f8610fb1d1e05f6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"importer"},"comments":13,"body":"Die aktuelle Umsetzung des Singleton in der Config Klasse kann unter bestimmten Umständen versagen und zur Initialisierung von zwei Instanzen führen.\n\nBeschreibung:\nWird z.B. bei einer Erweiterung bereits in der spezifischen config.php eine Instanz von File benötigt und gleichzeitig der smhextended Hook verwendet, dann wird aus der Files::getInstance() heraus die Config ein zweites Mal erzeugt. Damit werden die Globalen Variablen teilweise doppelt, bzw. als Array angelegt, was in der Folge zu verrückten Fehlermeldungen führt.\n\nErläuterung:\nDie Config::getInstance() prüft, ob die self::$objInstance noch kein Objekt ist und ruft erzeugt eine neue Instanz der Config. Innerhalb des Config::__construct() werden die config.php der einzelnen Module durchlaufen und dabei dann die Files Klasse per Files::getInstance() initialisiert.\nDiese ruft dann ihrerseits die Config::getInstance() wieder auf.\nDa aber der Konstruktor von Config noch nicht abgearbeitet wurde, ist also die self::$objInstance noch nicht definiert (wird erst nach vollständiger Abarbeitung des Konstruktors in der Config::getInstance() gesetzt).\nDas Problem tritt also immer auf, wenn eine Modulspezifische config.php irgendwo die Config::getInstance() wieder aufruft.\n\nLösungsvorschlag:\nIn Config::__construct() als erste Zeile folgendes einfügen:\n\n```\nself::$objInstance = $this;\n```\n\nDamit ist gewährleistet, dass self::$objInstance sofort initialisiert wurde und geschachtelte Aufrufe von Config::getInstance() erzeugen keine zweite Instanz von Config mehr.\n\nIn der Config::getInstance() kann dann die Zeile\n\n```\nself::$objInstance = new Config();\n```\n\ndurch \n\n```\nnew Config();\n```\n\nersetzt werden, muss aber nicht.\n\nDiese Änderung hat keinen Einfluss auf den Aufruf und ist für den Rest von Contao und deren Module transparent.\n\nDieses Problem hat nichts mit Ticket #2695 zu tun!\n\nBei den anderen Singleton Klassen habe ich noch keine Konstellation gefunden, bei der eine Änderung wie beschrieben nötig wäre.\n\n[Download the attachments](http://www.contao.org/tl_files/tickets/2706.zip \"Download the attachments of this ticket\")\n\n--- _Originally created by N.Parker on November 30th, 2010, at 11:46am (ID 2706)_","assignee":{"gravatar_id":"87d2e5aefadcb310f9155df28c2b3582","id":1192057,"url":"https://api.github.com/users/leofeyer","avatar_url":"https://secure.gravatar.com/avatar/87d2e5aefadcb310f9155df28c2b3582?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"leofeyer"},"labels":[{"name":"Defect","color":"bd2c00","url":"https://api.github.com/repos/contao/import/labels/Defect"},{"name":"framework","color":"e6e6e6","url":"https://api.github.com/repos/contao/import/labels/framework"}],"id":2391705,"pull_request":{"patch_url":null,"html_url":null,"diff_url":null},"number":2706,"title":"Problem mit Singleton der Config-Klasse","closed_at":null,"html_url":"https://github.com/contao/import/issues/2706","url":"https://api.github.com/repos/contao/import/issues/2706","milestone":{"created_at":"2011-11-29T15:29:54Z","state":"open","closed_issues":54,"due_on":null,"creator":{"gravatar_id":"87d2e5aefadcb310f9155df28c2b3582","id":1192057,"url":"https://api.github.com/users/leofeyer","avatar_url":"https://secure.gravatar.com/avatar/87d2e5aefadcb310f9155df28c2b3582?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"leofeyer"},"number":32,"title":"2.10.0","description":"Contao 2.10.0 (minor release)","open_issues":1,"url":"https://api.github.com/repos/contao/import/milestones/32"}},"action":"created","comment":{"created_at":"2011-11-29T20:02:20Z","updated_at":"2011-11-29T20:02:20Z","user":{"gravatar_id":"9994df352157ae1b778b792744bdbf05","id":1073273,"url":"https://api.github.com/users/aschempp","avatar_url":"https://secure.gravatar.com/avatar/9994df352157ae1b778b792744bdbf05?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","login":"aschempp"},"body":"Die einzigen Dinge welche ggf. nicht korrekt sind, wären die Einstellungen der localconfig. Die sind in der config.php noch nicht 100% korrekt verfügbar. Aber das lässt sich nicht ändern, und sollte jedem klar sein.\n\n--- _Originally created on April 12th, 2011, at 08:03am_","id":2945120,"url":"https://api.github.com/repos/contao/import/issues/comments/2945120"}}