[TYPO3-german] Unterschiedliches Verhalten des Query Managers?

Stephan Schuler Stephan.Schuler at netlogix.de
Wed Aug 23 22:37:32 CEST 2017


Hallo Michael.


Welchen Typ hast Du denn für die Property $admissionreleasestate konfiguriert? "@var integer", mit "@var float" oder "@var string"?

Ich würde sagen Du hast einen Bug gefunden den jemand beheben muss. Allerdings bin ich mir nicht ganz sicher, ob die Korrektur am Ende Deinen alten Code zwangsläufig wieder lauffähig macht.


Wenn Du sagst dass das mit 7.x noch geklappt hat aber mit 8.x nicht mehr, sehe ich die Umstellung auf Doctrine als heißen Kandidaten. Über die Zeit haben sich eine Menge Dinge in der Extbase-Persistenz und in der DatabaseConnection gesammelt die da aus Sicht des CMS natürlich auch hin gehören, die aber Doctrine nicht mitbringt weil Dotrine das nicht als seine Aufgabe sieht. Da kann bei der Migration schon mal der ein oder andere Aspekt unbeachtet bleiben. Ich halte einen solchen Bug gerade bei der Umstellung von 7.x auf 8.x für wahrscheinlich.


Wahlweise kann man alle Elemente des Arrays casten. zum Beispiel hiermit:
> $values = array_map(function($value) { return (float)$value}, $values);

Natürlich muss der Cast-Aufruf ein anderer sein, abhängig davon, welchen Typ Du für die Property in "@var" angegeben hast.

Das sorgt dafür dass Deine Datenbank nicht kaputt geht. Dein Code verhält sich allerdings weiterhin nicht so wie Du das erwartest. Du wirst ja einen Grund haben, weshalb Du da "1.2.3" abfragst. (float)"1.2.3" ist 1.2.


Eine andere Variante eines Bugfix könnte sein, dass an der Stelle eine Exception fliegen darf. In aktuellen PHP-Versionen sieht das Musterbeispiel so aus:
> $values = array_map(function($value:float) { return $value}, $values);


Andererseits muss man sich fragen, ob es die Aufgabe der Persistenz ist, das abzufangen. Ich hätte erwartet, dass das schon am Property Mapper hängen bleiben muss, und dann dort eben entweder gerade gezogen wird oder eine Exception wirft. Der Mechanismus kann der gleiche sein wie oben beschrieben, nur möglichst schon bevor der Request die Action betritt.


Ich persönlich würde eine Exception bevorzugen. Der Wert ist schlicht falsch, und ein automatischer Cast an der Stelle kann klappen, kann aber auch Blödsinn sein. Im Zweifelsfall merkt lange keiner dass das Blödsinn ist, es funktioniert ja manchmal. Und in Logs taucht kein Fehler auf.


Sollte Deine Property aber ein String sein (also "@var string" im Model), dann fehlen da eindeutig Anführungszeichen. Das wiederum sollte Doctrine eigentlich für Dich machen.


Beste Grüße,

Stephan Schuler
Web-Entwickler | netlogix Web Solutions

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: websolutions.netlogix.de



----------------------------
Neu: Wir sind Amazon Web Services Partner. Mehr erfahren:
https://websolutions.netlogix.de/technologie/amazon-web-services-aws
----------------------------




netlogix GmbH & Co. KG
IT-Services | IT-Training | Web Solutions
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Matthias Schmidt





More information about the TYPO3-german mailing list