[TYPO3-german] Extbase-Repository liefert keine Objekte von Unterklassen (Single Table Inheritance)

Jochen Fröhlich jochen.froehlich at typo3.org
Thu Mar 22 05:57:36 CET 2018


Hallo zusammen,

ich versuche, aus einem Repository Objekte zurück zu bekommen, die Unterklassen repräsentieren. Diese wurden mit Single Table Inheritance definiert. Siehe docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/5-modeling-the-class-hierarchy.html

Es ist das gleiche Problem wie hier beschrieben: forum.typo3.org/index.php?t=msg&goto=736175

Bisher funktioniert folgendes:
Um die verschiedenen Unterklassen unterscheiden zu können, habe ich ein Feld "record_type" definiert.
Im Backend kann man den RecordType in einem Dropdown auswählen, die Formularfelder ändern sich entsprechend der definierten Unterklassen.
Der RecordType wird richtig im Datenbankfeld record_type gespeichert.

Das funktioniert nicht:
Wenn das Repository im Controller abgefragt wird, dann liefert es nur Objekte des Typs BaseClass (die alle Unterklassen erweitern / extenden).

Unten findet Ihr meine aktuelle Konfiguration. TYPO3 / Extbase 8.7.11.

Was mache ich falsch? Falls weitere Informationen benötigt werden, bitte sagen.

Danke schon jetzt für Hinweise in die richtige Richtung.

Viele Grüße,
Jochen


###################
Verzeichnisstruktur:

[ExtName]
-- [Classes]
---- [Domain]
------ [Model]
-------- BaseClass.php
-------- [Base]
---------- SubClassA.php
---------- SubClassB.php
------ [Repository]
-------- BaseClassRepository.php


###################
TypoScript-Setup von EXT:ExtName:

config.tx_extbase.persistence.classes {
\VendorName\ExtName\Domain\Model\BaseClass {
mapping {
tableName = tx_extname_domain_model_baseclass
recordType = \VendorName\ExtName\Domain\Model\BaseClass
}
subclasses {
\VendorName\ExtName\Domain\Model\Base\SubClassA = \VendorName\ExtName\Domain\Model\Base\SubClassA
\VendorName\ExtName\Domain\Model\Base\SubClassB = \VendorName\ExtName\Domain\Model\Base\SubClassB
}
}
\VendorName\ExtName\Domain\Model\SubClassA {
mapping {
tableName = tx_extname_domain_model_baseclass
recordType = \VendorName\ExtName\Domain\Model\SubClassA
}
}
\VendorName\ExtName\Domain\Model\SubClassB {
mapping {
tableName = tx_extname_domain_model_baseclass
recordType = \VendorName\ExtName\Domain\Model\SubClassB
}
}
}

plugin.tx_extname_extname {
view { ... }
settings { ... }
}


###################
TCA von tx_extname_domain_model_baseclass:

'types' => [
'\VendorName\ExtName\Domain\Model\Base\SubClassA' => [
'showitem' => 'record_type, name, ...'
],
'\VendorName\ExtName\Domain\Model\Base\SubClassB' => [
'showitem' => 'record_type, name, ...'
],
]


###################
SubClassA:

namespace VendorName\ExtName\Domain\Model\Base;

use VendorName\ExtName\Domain\Model\BaseClass;

class SubClassA extends BaseClass { ... }


###################
BaseClassController.php: (liefert nur Objekte des Typs BaseClass)

public function listAction() {
$records = $this->baseClassRepository->findAll();
$this->view->assign('records', $records);
}

###################



More information about the TYPO3-german mailing list