heimrichhannot / contao-subcolumns-bootstrap-bundle

GNU Lesser General Public License v3.0
0 stars 1 forks source link

Modul funktioniert nicht in PHP 8 #8

Closed green-pixelbox closed 2 years ago

green-pixelbox commented 2 years ago

Ersteinmal Danke für das super Modul. Nur als Hinweis, in PHP 8 gibt es eine Fehlermeldung, da funktioniert das MOdul noch nicht. Hier die Fehlermeldung: [2022-02-16T14:19:37.635851+01:00] request.INFO: Matched route "tl_page.2.root". {"route":"tl_page.2.root","route_parameters":{"_token_check":true,"_controller":"Contao\FrontendIndex::renderPage","_scope":"frontend","_locale":"de","_format":"html","_canonical_route":"tl_page.2","parameters":"","pageModel":{"Contao\PageModel":[]},"_route":"tl_page.2.root","_route_object":{"Symfony\Component\Routing\Route":[]}},"request_uri":"https://hof-keppel.gp-serverpower.de/","method":"GET"} [] [2022-02-16T14:19:37.638183+01:00] security.INFO: Populated the TokenStorage with an anonymous Token. [] [] [2022-02-16T14:19:37.658197+01:00] request.CRITICAL: Uncaught PHP Exception TypeError: "count(): Argument #1 ($value) must be of type Countable|array, null given" at /srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/subcolumns/elements/colsetStart.php line 157 {"exception":"[object] (TypeError(code: 0): count(): Argument #1 ($value) must be of type Countable|array, null given at /srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/subcolumns/elements/colsetStart.php:157)"} []

koertho commented 2 years ago

@green-pixelbox Hast du schon die aktuellste Version installiert (mit unserem subcolums-fork)? Bitte immer Contao-, Bundle- und PHP-Version angeben.

Defcon0 commented 2 years ago

Ja, hat er:

/srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/subcolumns/elements/colsetStart.php:157

Das Problem ist aber nicht in diesem Bundle (contao-subcolumns-bootstrap-bundle), sondern in heimrichhannot/subcolumns.

Der Fehler deutet eher darauf hin, dass in den Settings noch kein Columnset ausgewählt wurde. Daher ist dann sets in dem Array null was zu dem Fehler führt.

green-pixelbox commented 2 years ago

oh sorry. Hier die Daten: Contao 4.12.6, Modulversion: 1.9.0. In PHP 7.4 läuft alles super wie immer, nur in PHP 8 bekomme ich die Fehlermeldung.

koertho commented 2 years ago

@Defcon0 Ah, nicht richtig geschaut. Könnte man in so einem Fall nicht eine klare Exception werfen?

Defcon0 commented 2 years ago

legacy-code von felixpfeiffer... ;-)

Defcon0 commented 2 years ago

Ich kann es abfangen, aber wenn es in 7.4 ging, liegt es nicht daran, dass in den settings nichts eingetragen wurde.

@green-pixelbox Hast du in den Contao-Einstellungen ein Columnset (Bootstrap 4, 5 usw.) ausgewählt?

green-pixelbox commented 2 years ago

ja bootstrap 4

Defcon0 commented 2 years ago

Seltsam. Ist am entsprechenden Content Element definitiv in den Feldern strSet und sc_type etwas eingetragen?

https://github.com/heimrichhannot/contao-subcolumns/blob/master/elements/colsetStart.php#L157

Die Container-Variable wäre nur dann null, wenn er da nix findet:

https://github.com/heimrichhannot/contao-subcolumns/blob/master/elements/colsetStart.php#L121 https://github.com/heimrichhannot/contao-subcolumns/blob/master/elements/colsetStart.php#L52

green-pixelbox commented 2 years ago

also ich teste grad fleissig. Es ist nun so. wenn ich eine frische contao installation 4.12 nehme und das modul installiere, mit PHP 8, funktioniert es nun doch gut, es gibt keine fehlermeldung. es ist in meinem fall so, das ich daten aus einer alten contao version migriert habe, dort war noch das Spaltenset YAML 4 drin, damit wurde gearbeitet in der alten seite. wenn ich nun auf bootrap 4 umschalte und ich gehe in den artikel, dann kommt folgende fehlermeldung, wenn ich PHP 8 verwende. Wenn ich PHP 7.4 verwende, kommt die fehlermeldung nicht. Fehlermeldung: [2022-02-16T14:36:33.081298+01:00] request.INFO: Matched route "contao_backend". {"route":"contao_backend","route_parameters":{"_route":"contao_backend","_scope":"backend","_token_check":true,"_controller":"Contao\CoreBundle\Controller\BackendController::mainAction"},"request_uri":"https://hof-keppel.gp-serverpower.de/contao?do=article&id=92&ref=sdHJ0cwt&rt=314a6e8ed9b4310a7ab41afb7.WCrR_FiVH8QUVyo33usIfrcXA94on-cHPouy09qADwY.D0LmvizeLYUtIWQB745yNM1TNZ9jzaZUX93nkJzLPSsOHriyDuJxo2EgZw&table=tl_content","method":"GET"} [] [2022-02-16T14:36:33.122164+01:00] request.CRITICAL: Uncaught PHP Exception TypeError: "count(): Argument #1 ($value) must be of type Countable|array, null given" at /srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/contao-subcolumns-bootstrap-bundle/src/Element/ColsetPart.php line 50 {"exception":"[object] (TypeError(code: 0): count(): Argument #1 ($value) must be of type Countable|array, null given at /srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/contao-subcolumns-bootstrap-bundle/src/Element/ColsetPart.php:50)"} []

green-pixelbox commented 2 years ago

error-subc

Defcon0 commented 2 years ago

Naja, es kommt in php7.4 zwar keine fehlermeldung, aber 100%ig fehlerfrei läuft es dann nicht, weil dort einfach die variable nicht null sein dürfte. Warum es dort null ist, ist schwer zu beantworten per remote.

Ich baue mal einen Check darauf ein, dann wird der Fehler zumindest nicht in der Form geworfen.

green-pixelbox commented 2 years ago

super danke euch!

Defcon0 commented 2 years ago

Lass dir bitte mal das hier in Zeile 112 in /srv/www/hof-keppel/public/contao49/vendor/heimrichhannot/subcolumns/elements/colsetStart.php ausgeben:

        echo '<pre>';
        var_dump($this->strSet);
        var_dump($this->sc_type);
        echo '</pre>';
        die();
green-pixelbox commented 2 years ago

hier die Ausgabe bei einer Seite, wo vorher YAML 4 Standard verwendet wurde: string(9) "boostrap4" string(0) ""

Defcon0 commented 2 years ago

Da haben wir es ;-) Der Fehler ist, dass sc_type leer ist. Das darf im Kontext unseres Bundles nicht sein. Dort wählst du aus, welches Columnset, was du im Backend unter Spaltensets (-> tl_columnset) angelegt hast, verwenden willst. Hast du Columnsets angelegt? Falls ja, musst du diese entsprechend abbilden und migrieren.

green-pixelbox commented 2 years ago

ja columnsets habe ich eins angelegt.

Defcon0 commented 2 years ago

Wie sah denn die Situation in deiner alten Instanz (YAML4) aus? Da gab es, so wie ich dich verstehe, keine tl_columnset-Instanzen, also im Backend angelegte Columnsets, richtig?

green-pixelbox commented 2 years ago

ja richtig. in yaml 4 gab es keine columnsets

Defcon0 commented 2 years ago

Dann wird es schwierig. Du musst aus den alten Datenbank-Datensätzen herausfinden, welches konkrete Spaltenset genutzt wurde (in welchem Feld das genau war, müsstest du bitte in tl_content mal schauen). Dann musst du alle Spaltensets, die es damals gab, als Spaltensets im Backend anlegen und die alten Spaltensetzuordnungen in die neuen Spaltensets aus dem Backend (IDs) abbilden. Dann geht es wieder. Ist also eine klassische Migration, kein Fehler im Bundle.

green-pixelbox commented 2 years ago

okay danke für den hinweis. ich werde einfach auf php 7.4 die alten yaml spaltensets im backend rausschmeissen und dann umstellen auf bootstrap 4 und php 8. dann funktioniert es ja. danke nochmal für den super schnellen einsatz :)

Defcon0 commented 2 years ago

👍