Zum Inhalt springen

Fremdschlüssel setzen

Erstellt am 7. März 2017 · 3 Antworten · letzte Antwort am 10. März 2017

Tags: Datenbank, TYPO3 8, Frage

getit ·

Da ich jetzt seit 3 Wochen einfach nicht weiter komme, frage ich euch:

Also ich habe zwei Tabellen:
Ansprechpartner - Behoerde (n:m)
Im Model für den Ansprechpartner ist ein Feld: behoerdeId

Mein AnsprechparnterController::addFormAction() sieht so aus:

/**
 * @param Ansprechpartner|null $ansprechpartner
 */
public function addFormAction(Ansprechpartner $ansprechpartner = null) {
  $this->view->assign('ansprechpartner', $ansprechpartner);
  $this->view->assign('behoerden', $this->behoerdeRepository->findAll());
}

Das entsprechende Template:

<f:form action="add" object="{ansprechpartner}" name="ansprechpartner" arguments="{behoerde:behoerdeId}" additionalAttributes="{role:'form'}">
...
<div class="form-group row">
  <label>Behörde</label>
  <f:form.select options="{behoerden}" optionLabelField="bezeichnung" property="behoerdeId" class="form-control"/>
</div>
</f:form>

Und die Ansprechpartner::addAction()

/**
 * @param Ansprechpartner $ansprechpartner
 * @param Behoerde $behoerde
 */
public function addAction(Ansprechpartner $ansprechpartner, Behoerde $behoerde) {
  $ansprechpartner->addBehoerdeId($behoerdeId);
  $this->ansprechpartnerRepository->add($ansprechpartner);
  $this->redirect('list');
}

Ich bekomme aber beim Absenden des Formulars (AddForm) immer nur Fehlermeldung. Entweder 'Required argument "behoerde" is not set' (mit den Paramter wie geschrieben) oder 'Invalid property mapping'.
Kann mir jemand weiterhelfen?

getit ·

Also ein Freund konnte mich etwas weiterbringen.

Die Property $behoerde muss aus den Actions addFormAction() und addAction() weg.
Ebenfalls das Attribut 'arguments' im Formular.

Damit ist aber das ObjectStorage im $ansprechpartner (Debugausgabe in addAction() als erste Zeile) empty.

KKSoftware\Kkbaybw\Domain\Model\Ansprechpartnerprototypetransient entity
  baybwId => protected 23 (integer)
  behoerdeId => protectedTYPO3\CMS\Extbase\Persistence\ObjectStorageprototype object (empty)

Im $this->request liegt die Information, in diesem Bsp.

TYPO3\CMS\Extbase\Mvc\Web\Requestprototype object
  ...
  arguments => protected array(3 items)
    ...
    ansprechpartner => array(2 items)
      baybwId => '23' (2 chars)
      behoerdeId => '3' (1 chars)

Im $ansprechpartner ist diese aber empty? Wieso?

getit ·

Ich habe eine kleine Extension zum testen geschrieben.

Für alle denen es so geht wie mir, hier nochmal der genau weg das Plugin einzubinden:
1. Die test.zip nach typo3conf\ext entpacken
2. Im ExtensionManager die Extension 'test' aktivieren
3. Das statische Template 'test' (zusätzlich zu: 'Content elements (fluid_styled_content)') hinzufügen
4. Das TS der Seite anpassen, minimal:

page = PAGE
page.10 < styles.content.get

5. Der Seite einen Inhalt vom Typ 'Plugin' hinzufügen (Selected Plugin: 'Export')

Beim Abschicken des AddFormulars (beim Ansprechpartner) habe ich in Ansprechpartner::addAction() einen var_dump eingebaut.
Hier ist bei mir die behoerdeId immer empty.

Was mache ich falsch?

Die Datei kann hier: https://www.dropbox.com/s/k1bcdkx8nzuszdm/test.zip?dl=0 runtergeladen werden.

getit ·

😃 Ich habe den Fehler gefunden 😃😃😃

Das Selectfeld im Form muss so aussehen

<f:form.select options="{behoerden}" property="behoerdeId" optionLabelField="bezeichnung" size="5" multiple="1" class="form-control" />

Das ist alles!!