Extbase - Zugriff auf die fe user Tabelle
http://www.derhansen.de/2012/06/zugriff-auf-frontend-user-tabelle-aus.html
http://www.derhansen.de/2012/12/typo3-extbase-mapping-existing-fields.html
Einleitung
Wie kriege ich die Daten
Wir möchten die Daten der fe_users Tabelle, also die Frontenduser in unserer eigenen Extension verwenden. Extbase hat ein eigenes Domain Model und ein eigenes Repository vorbereitet um auf die Standard Felder der fe_users Tabelle zuzugreifen. Das bedeutet man kann die Daten einfach nutzen, wenn man sein eigenes Model erweitert. Ich brauche keine Getter und Setter Methoden etc. mehr. Zu definieren.
fe_users extended
Allerdings wird gerade die Tabelle fe_users oftmals von anderen Extensions um weitere Felder erweitert (z.B. sr_feuser_register). Diese Felder sind natürlich nicht im Model von extbase enthalten. Deshalb muß man sie nochmal separat behandeln. Man erweitert einfach sein eigenes Datenmodell um diese Felder. So funktioniert das ganze.
Zu guter letzt möchten wir vielleicht auch noch die fe_users um eigene Felder erweitern.
Frontenduser nutzen
Model für fe_user
In der eigenen Extension zuerst ein Model anlegen. Normalerweise wird dazu Abstract Entity erweitert. Wir erweitern diesmal das bereits von Extbase angelegte Model, somit haben wir dessen Eigenschaften bereits (kann man schön in der extbase extension im Quelltext sehen.)
class RmaUser extends TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
}
Beispiel fe_users in eigener Extension nutzen
Übersicht
- fe_users-Repository per Dependency Injection zu Verfügung stellen
- Auslesen der Userdaten
Achtung: Extbase erweitert die fe_users und fe_groups um das Feld tx_extbase_type (Record Type) Ist dies nicht vorhanden gibt es nichts zurück. Lösung s.u.
fe_user Tabelle Injecten
Im Controller deiner Extension Ab 6.0
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
* @inject
*/
protected $frontendUserRepository;
Old School (<4.7)
/**
* @var Tx_Extbase_Domain_Repository_FrontendUserRepository
*/
protected $userRepository;
/**
* Inject the user repository
*
* @param Tx_Extbase_Domain_Repository_FrontendUserRepository $userRepository
* @return void
*/
public function injectFrontendUserRepository(Tx_Extbase_Domain_Repository_FrontendUserRepository $userRepository) {
$this->userRepository = $userRepository;
}
Userdaten holen
$user = $this->userRepository->findByUid($uid);
Problem: User werden nicht ausgegeben weil record type nicht gesetzt ist
Im TypoScript definiert Extbase
config.tx_extbase.persistence.classes {
Tx_Extbase_Domain_Model_FrontendUser {
mapping.recordType = Tx_Extbase_Domain_Model_FrontendUser
}
}
Im Mapping ist der recordType gesetzt d.h. es erwartet das bei einem fe_users Eintrag dieser Wert geetzt ist.