Zum Inhalt springen

Child wird immer doppelt angelegt?!

Erstellt am 28. November 2017 · 2 Antworten · letzte Antwort am 1. Dezember 2017

Tags: Fluid, TYPO3 8, Frage

mbuchegger ·

Hi Leute.

Ich stehe gerade vor einem Rätsel.
Ich will mir ein Child über FE erstellen - es geht um Gewinnspiele.

Gewinnspiel->Teilnahme
Das sind die Controller / Tabellen die es dazu gibt.

Ich rufe also im Controller Teilnahme newAction auf und übergebe als argument Gewinnspiel.

/**
     * Die IP Adresse auslesen
     *
     * @return IP-Adresse
     */
    public  function getIPAddress() {

      if(!empty($_SERVER['TYPO3_DB'])) {
        $ip=$_SERVER['HTTP_CLIENT_IP'];            // Check ip from share internet
      } elseif(!empty($_SERVER[HTTP_X_FORWARDED_FOR])) {
            $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];      //to check ip is pass from proxy
        } else {
            $ip=$_SERVER['REMOTE_ADDR'];
        }
      
        return $ip;
    }
    
    /**
     * Den aktuell angemeldeten User auslesen
     *
     * @return \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
     */
    public function getCurrentUser() {
        if ($this->currentUser == NULL && $GLOBALS['TSFE']->fe_user->user['uid'] > 0) {
            $this->currentUser = $GLOBALS['TSFE']->fe_user->user;
        } else {
            $this->currenUser = null;
        }

        return $this->currentUser;  
    }

    /**
     * action new
     *
     * @return void
     */
    public function newAction(
        \Musicalplanet\MpGewinnspiele\Domain\Model\Gewinnspiel $gewinnspiel,
        \Musicalplanet\MpGewinnspiele\Domain\Model\Teilnahme $newTeilnahme = NULL)
    {
        $this->view->assign('gewinnspiel', $gewinnspiel);
        $this->view->assign('newTeilnahme', $newTeilnahme);
        $this->view->assign('user', $this->getCurrentUser());
        $this->view->assign('ip', $this->getIPAddress());
    }

Wo folgendes Formular liegt:

<f:form class="form-inline" action="create" enctype="multipart/form-data" name="newTeilnahme" object="{newTeilnahme}" arguments="{gewinnspiel:gewinnspiel}">
                <f:form.hidden property="pid" value="{gewinnspiel.pid}" />
                <f:form.hidden property="benutzer" value="{user.uid}" />
                <f:form.hidden property="ip" value="{ip}" />
                
                <div class="form-group">
                    <label for="name">Name</label>
                    <f:form.textfield property="name" value="{user.firstName} {user.lastName}"  required="1" />
                </div>
                <div class="form-group">
                    <label for="email">E-Mail</label>
                    <f:form.textfield property="email" value="{user.email}" required="1" />
                </div>
                <div class="form-group">
                    <label for="telefon">Telefon</label>
                    <f:form.textfield property="telefon" value="{user.telephone}" />
                </div>
                <div class="form-group">
                    <label for="bemerkung">Bemerkung</label>
                    <f:form.textfield property="bemerkung" />
                </div>
                <div class="form-group">
                    <label for="agb">AGB</label>
                    <f:form.checkbox property="agb" value="1" />
                </div>
                
                <f:form.submit class="btn btn-default" value="Teilnehmen" />
            </f:form>

Wird das also ausgelöst springen wir in die createAction:

/**
     * action create
     *
     * @param \Musicalplanet\MpGewinnspiele\Domain\Model\Teilnahme $newTeilnahme
     * @return void
     */
    public function createAction(
        \Musicalplanet\MpGewinnspiele\Domain\Model\Gewinnspiel $gewinnspiel,
        \Musicalplanet\MpGewinnspiele\Domain\Model\Teilnahme $newTeilnahme)
    {
        $gewinnspiel->addTeilnahme($newTeilnahme);
        
        $this->objectManager->get('Musicalplanet\\MpGewinnspiele\\Domain\\Repository\\GewinnspielRepository' )->update($gewinnspiel);
        
        $this->redirect('show','Gewinnspiele','MpGewinnspiele',array('gewinnspiel'=>$gewinnspiel));
    }

Das klappt auch alles... Und es wird auch die Teilnahme erstellt. Allerdings gleich zwei mal...?
Warum?!

Hat dazu jemand eine Idee?

Lg M.