Zum Inhalt springen

eigener ActionController und Inhalte in Tabelle schreiben

Erstellt am 31. März 2014 · 2 Antworten · letzte Antwort am 1. April 2014

Tags: TYPO3 6.x, Frage

HH ·

Hallo,
ich habe in einer Testextension mal eine eigene Action erstellt,
Ich möchte im Frontend nur auf einen link "Fehlanzeige" klicken, dann sollen automatisch bestimmte Daten in der Datenbank gespeichert werden. Z.B als Anezeigentext "Fehlanzeige" als Datum "2014" usw...

Das funktioniert perfekt wenn es sich dabei um "properties" der Klasse handelt.
Befinden sich innerhalb der Tabelle auch Felder als Relation, zum Beispiel zu "Kategorien" oder zu den FeUsern funktioniert das leider nicht.
Ich bekomme eine Fehlermeldung: Fatal Error: Argument 1 passed to HH\TestAnzeigen\Domain\Model\Anzeigen::setKategorie() must be an instance of HH\T.......

Ich will ja gar keine neue Instanz der Klasse Kategorie erzeigen, ich will lediglich meiner Anzeigenklasse einen Eintrag hinzufügen.

	public function fehlanzeigeAction(\HH\TestAnzeigen\Domain\Model\Anzeigen $fehlAnzeigen = NULL) {
		$fehlAnzeige = new \HH\TestAnzeigen\Domain\Model\Anzeigen;
		$fehlAnzeige->setAnzeigenText('Fehlanzeige');
		$fehlAnzeige->setKategorie(1);
		//Jahreszahl ermitteln und an das Formular übergeben
		$year = date('Y');
		$fehlAnzeige->setJahr($year);
		
		
		$this->anzeigenRepository->add($fehlAnzeige);
		$this->flashMessageContainer->add('Fehlanzeige geschalten!');
		$this->redirect('list');
	}

Wo ist der Denkfehler?
Danke!!!!!

Schweriner ·

Offenbar erwartet setKategorie keine Zahl als Parameter sondern ein echtes Model vom Typ Kategorie. Einen solchen musst Du zuvor instanzieren und der Funktion übergeben. Zum Speichern ist nicht der add Funktion möglicherweise noch ein Add auf das Repository anzuwenden:

$this->anzeigenRepository->update($fehlAnzeige);

HH · · Beste Antwort

Danke für die Antwort,
habs jetzt am Beispiel der FrontedUser so gemacht:

//UID des aktuelle feUsers
$myuid = $GLOBALS['TSFE']->fe_user->user['uid'];
$user = $this->benutzerRepository->findByUid ($myuid);
$fehlAnzeige->setBenutzer($user);

Bei den Kategorien geht das genauso, ich möchte ja keine neue Kategorie erzeugen, sondern auf eine bestehendes (Model) zurückgreifen. Also benutz ich das KategorieRepository.

Ich dachte ich könnte in meine Anzeigen einfach die entsprechenden Einträge eintragen, ohne ein echtes Model zu erzeugen. Ist wahrscheinlich unsauber......
Danke nochmals!