Hallo,
ich arbeite mit Typo3 6.0.2 und dem extension_builder 2.5.2
Eine meiner Extensions enthält ein backendModul. Die DB-Inhalte, die damit verbunden sind, sind nicht fürs Frontend gedacht. Da zum Hinzufügen eines Datensatzes einige Feldwerte berechnet und im Hintergrund weitere Aktionen ausgeführt werden. Habe ich eine eigene Action createNew geschrieben.
Das Erzeugen eines neuen Datensatzes läuft über die Instanziierung eines Model-Objekts, setzen der Eigenschaften, und abschließendem Aufruf der add-Methode des Repositorys. Das funktioniert auch soweit ganz gut.
Allerdings werden zwar die Felder tstamp und crdate automatisch gesetzt, nicht aber das Feld cruser_id. Ich weiß nicht, ob das einen bestimmten Grund hat und so gewollt ist, mir scheint es eher ein Versäumnis zu sein.
Frage 1: Muss ich für die Extension noch irgendwo irgendetwas setzen, damit die cruser_id beim Anlegen neuer Datensätze automatisch gesetzt wird? In ext_tables.php und ext_tables.sql ist das Feld enthalten.
Frage 2: Wenn ich das setzen selbst übernehmen muss, wie gehe ich da vor? Ich habe testweise in dem Model eine property cruserId definiert nebst Getter un Setter, und vor dem add() rufe ich Model->setCruserId(1) auf. Das wird aber nicht in die Datenbank geschrieben. Vielleicht muss ich noch etwas ins TCA schreiben?
Für jeden Tipp wäre ich dankbar.
Viele Grüße
Christian
Eigentlich müsste folgendes in der columns-Definition in der TCA stehen.
'interface' => array(
'showRecordFieldList' => 'cruser_id'
),
'types' => array(
'0' => array('showitem' => 'cruser_id')
),
'columns' => array(
'cruser_id' => array(
'exclude' => 0,
'label' => 'cruser',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users',
'foreign_class' => '\TYPO3\CMS\Extbase\Domain\Model\FrontendUser',
'maxitems' => 1
)
),
),
Im Controller musst du den Setter des Models dann aufrufen.
Für unsere Extention mm_forum hatten wir beispielsweise noch eine Schicht zwischengelegt und eine eigene Feuser Klasse geschrieben, die vom normalen Fe_user erbt. Hierfür hatten wir dann auch ein eigenes Repository geschrieben was dann wie folgt aussieht:
/**
* Finds the user that is currently logged in, or NULL if no user is logged in.
*
* @return Tx_MmForum_Domain_Model_User_FrontendUser
* The user that is currently logged in, or NULL if
* no user is logged in.
*/
public function findCurrent() {
$currentUserUid = (int)$GLOBALS['TSFE']->fe_user->user['uid'];
return $currentUserUid ? $this->findByUid($currentUserUid) : null;
}
Ich hoffe dir konnten die Code-Schnipsel ein wenig helfen. Ich denke es ist auch möglich das Standart Repository vom Fe_users aufzurufen. Jedoch ist mir manchmal die Software-Architektur vom Typo3 leicht unübersichtlich 😉
Gruß,
Ruven
Wie es auch krisc gerne hätte ist cruser_id für die ID des Backendusers gedacht soweit ich weiß, nicht Frontenduser. Aber rfehling hat schon recht, Du musst selbst den aktuellen (Backend-)User auslesen und setzen.