Zum Inhalt springen

fe_user M:M Relation Ausgabe

Erstellt am 31. Mai 2019 · 1 Antwort · letzte Antwort am 11. Juni 2019

Tags: Frontend-Benutzer, TYPO3 9, Frage

Lycanthropy ·

Hey Leute,

Ich hoffe, mir kann vielleicht jemand auf den letzten Metern meiner Extension helfen. Ich bin blutiger Extbase Anfänger aber Listen- und Detailansicht eines fe_user stehen soweit 🙂

Ich habe über den Extension Builder die fe_user Tabelle erweitert. Auf „normale“ Felder mit Inhalt kann ich zugreifen und sie ausgeben, kein Problem soweit. Ein weiteres Feld „fachgebiete“ habe ich als M:M Relation (Tabelle tx_musiker_fachgebiete, tx_mmmusiker_erweiterteinfos_fachgebiete_mm) angelegt und hier tu ich mich schwer mit der Ausgabe bzw. dem Handling im Controller.

In der showAction meines Controllers übergebe ich alles für die Detail-Ansicht eines Frontend-Users ( for each im Template und dann {feuser.xxx) ), wie kann ich jetzt zusätzlich die zugewiesenen Fachgebiete ausgeben? In {feuser.fachgebiete} steht ja nur die Anzahl der zugewiesen Fachgebiete... darüber möchte ich aber den Titel aller dem User zugeordneten Fachgebiete ausgeben.

Hier mal meine Dateien (Ausschnitte):

ErweiterteInfosController.php:

…
	/**
     * User ExtendFeUser
     *
     * @var \Mmmusiker\MmMusiker\Domain\Repository\ExtendFeUser
     * @inject
     */
    protected $ExtendFeUser;

    /**
     * action show
     * 
     * @param \Mmmusiker\MmMusiker\Domain\Model\ErweiterteInfos $uid
     * @return void
     */
    public function showAction(\Mmmusiker\MmMusiker\Domain\Model\ErweiterteInfos $uid)
    {
	    
	   $temp = $this->request->getArgument('uid'); 
	   $user = $this->ExtendFeUser->findByUid($temp);
	   $this->view->assign('feuser',$user);
}
…

Domain/Model/ExtendFeUser.php:

…
    /**
     * fachgebiete
     *
     * @var string
     */
    protected $fachgebiete;

    /**
     * @param string $fachgebiete
     */
    public function getfachgebiete() {
        return $this->fachgebiete;
    }

    /**
     * @param string $fachgebiete
     */
    public function setfachgebiete($fachgebiete) {
        $this->fachgebiete = $fachgebiete;
    } 
…

TCA/Overrides/fe_users.php

…
	'fachgebiete' => [		
		'exclude' => false,		
		'label' => 'Fachgebiete',		
		'config' => [
			'type' => 'select',	
			'renderType' => 'selectMultipleSideBySide',
			'items' => [
				['', 0],
			],
			'foreign_table' => 'tx_musiker_fachgebiete',	
			'MM' => 'tx_musiker_erweiterteinfos_fachgebiete_mm',
			'foreign_table_where' => 'ORDER BY tx_musiker_fachgebiete.title',	
			'size' => 5,	
			'minitems' => 0,
			'maxitems' => 10,
		]
	],
...

ext_typoscript_setup.typoscript

config.tx_extbase {
  persistence {
    classes {

      Mmmusiker\MmMusiker\Domain\Model\ErweiterteInfos {
        mapping {
          tableName = fe_users
          recordType = Tx_MmMusiker_ErweiterteInfos
        }
      }

      Mmmusiker\MmMusiker\Domain\Model\Fachgebiete {
        mapping {
          tableName = tx_musiker_fachgebiete
          recordType = Tx_MmMusiker_Fachgebiete
        }
      }
…

Edit: Irgendwie scheint die Code-Formatierung hier nicht mehr so ganz zu funktionieren :/

Julian.​Hofmann ·

Dein Problem liegt im Model:
Du definierst $fachgebiete als String - und damit greift keine "Magie" von Extbase. $fachgebiete ist jedoch (für Extbasse) ein Repository, in dem sich Fachgebiet-Objekte befinden. Wenn Du im Model also stattder String-Definition als Datentyp \TYPO3\CMS\Extbase\Persistence\ObjectStorage<Mmmusiker\MmMusiker\Domain\Model\Fachgebiete> verwendest (und *alle* Caches löschst), dann sollten unter {feuser.fachgebiete} die Fachgebit-Objekte erscheinen - ganz ohne weiteres Zutun.

Ein ganz nettes Tutorial dazu hat Anja vor längerer Zeit geschrieben:
http://www.typoblog.de/teil-5-extension-entwicklung-mit-typo3-extbase-fluid/