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.