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.