Sven Kalbhenn Ich habe die Redirect-URL mal decodiert und in ihre Bestandteile zerlegt:
https://leseohren.ddev.site/
test-pages/person
+ ?
tx_leseohren_personen[action]=show
+ &
tx_leseohren_personen[controller]=Person
+ &
tx_leseohren_personen[person][0]=18
+ &
cHash=1141a2d13956e8dd85378c16d8f836e5
https://leseohren.ddev.site/
ist die Base URL aus deiner Site Configuration. test-pages/person
ist sicherlich der normale lesbare Seiten-Pfad, der verwendet wird, wenn man die Seite mit der uid
aus der Variable $redirectPID
aufruft.
Alle GET
-Parameter der Adresse, die im Extbase-Kontext verwendet werden (also alle außer cHash
), beginnen mit tx_leseohren_personen
. leseohren
entspricht dabei, nach Konvention, dem klein geschriebenem Extension-Key und personen
entspricht dem klein geschriebenem Plugin-Namen. Ich nehme mal an, dass du das Extbase Plugin unter dem Bezeichner Personen
per ExtensionUtility::configurePlugin()
in der ext_localconf.php
konfiguriert hast.
Unter dem Namensraum tx_leseohren_personen
werden nun in der Array-Schreibweise in eckigen Klammern die Schlüssel action
und controller
geführt mit von dir bereits bestätigten Werten show
für die Action und Person
für den Controller.
Darüber hinaus wird ein Argument person
unter tx_leseohren_personen[person][0]=18
angegeben. Auffällig ist hier, dass das Argument person
offenbar ein Array enhält und unter dem Array-Index 0
den Wert 18
enthält. Es müsste doch eigentlich tx_leseohren_personen[person]=18
lauten, um direkt, auf Basis des übergebenen Wertes, auf das Person
Domain Model mappen zu können oder?
Prüfe mal welchen Typ $redirectPerson
besitzt. Der URL nach wäre das ja dann ein Array an einer Stelle an der ein Integer (die uid
des Person
Domain Model Datensatzes) erwartet wird.
Im Code deines Eingangs-Posts steht:
$redirectPerson = $note->getPerson();
Evtl. gibt es ein Problem im Rückgabewert von getPerson()
im Note
Domain Model. Wird hier eventuell ein ObjectStorage
mit potenziell mehreren Person
Objekten zurückgegeben statt nur eines Objektes? Zeig am besten mal diese Methode.
Falls sich meine Vermutung bewahrheitet, könnte folgender Code ein einfacher Workaround sein, der das erste Person
-Objekt des ObjectStorage
zurück gibt:
return $this->redirect('show', 'Person', 'Leseohren', ['person' => $redirectPerson[0]], $redirectPID, null, 303);
Mehr Aufschluss wird dir ansonsten auch der Property Mapper selbst geben können, in dem der Fehler ausgeworfen wird (vendor/typo3/cms-extbase/Classes/Property/PropertyMapper.php
in Zeile 66). Schreib doch dort, bevor der Fehler geworfen wird, ein paar Zeilen zum debugging hinein, um beim nächsten Frontend-Aufruf mehr über den Fehler-Kontext zu erfahren:
...
} catch (\Exception $e) {
\TYPO3\CMS\Core\Utility\DebugUtility::debug($source, 'SOURCE');
\TYPO3\CMS\Core\Utility\DebugUtility::debug($targetType, 'TARGET TYPE');
\TYPO3\CMS\Core\Utility\DebugUtility::debug($currentPropertyPath, 'CURRENT PROPERTY PATH');
throw new Exception('Exception while property mapping at property path "' . implode('.', $currentPropertyPath) . '": ' . $e->getMessage(), 1297759968, $e);
}
...
Randnotiz:
Da du meine PM an dich offenbar bisher noch nicht bemerkt hast hier kurz zur Info: Um die Lesbarkeit der von dir geteilten mehrzeiligen Code-Blöcke zu verbessern, macht es Sinn, den Code mit drei Backticks ``` (je in einer eigenen Zeile vor und nach dem Code) zu umschließen. Außerdem könntest du per Angabe des Code-Typs für eine farbliche Optimierung sorgen. Mehr dazu hier. Die normale "Code einfügen"-Funktion verwendet nur den Inline Code-Style. Bei mehrzeiligem Code macht die Block Schreibweise aber mehr Sinn, da sonst die Zeileneinrückung verloren geht. Ich habe mir erlaubt deine letzten Posts in dieser Hinsicht zu bearbeiten.