---
title: "Extbase: Validierung von Formularfeldern funktioniert nicht richtig?!"
url: "https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage"]
created: "2012-11-08"
last_reply: "2012-11-10"
replies: 13
solved: false
page: 1
pages: 1
lang: "de"
---

# Extbase: Validierung von Formularfeldern funktioniert nicht richtig?!

Extensions › Extbase · 13 Antworten · gestartet 2012-11-08

## Eröffnungsbeitrag

**Unbekannter Benutzer** · 2012-11-08 · [Beitrag #1](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/1)

Hi,

Meine Umgebung: TYPO3 4.7.5, PHP 5.3.16

Ich schreibe gerade eine kleine Kontaktformular-Extension mit Extbase.

Ich versuche gerade herauszufinden, warum die Validierung im Model nicht greift. Folgendes passiert:

Das Formularfeld "Company" soll mit dem Validator "NotEmpty" validiert werden (Ausschnitt aus dem Model):

```php
<?php

class Tx_MyContactform_Domain_Model_ContactFormItem extends Tx_Extbase_DomainObject_AbstractEntity {

	/**
	 * company
	 *
	 * @var string
	 * @validate NotEmpty
	 */
	protected $company;

	/**
	 * Returns the company
	 *
	 * @return string $company
	 */
	public function getCompany() {
		return $this->company;
	}

	/**
	 * Sets the company
	 *
	 * @param string $company
	 * @return void
	 */
	public function setCompany($company) {
		$this->company = $company;
	}

...
}
?>
```

Im Controller wird mit der Methode "showFormAction" das Formular angezeigt. Wenn das Formular abgeschickt wird, wird die Methode "submitFormAction" aufgerufen. Sollte ein Pflichtfeld nicht sauber ausgefüllt sein, so sollte ja die Validierung dafür sorgen, dass entsprechende Fehlermeldungen angezeigt werden.

```php
<?php
class Tx_MyContactform_Controller_ContactFormItemController extends Tx_Extbase_MVC_Controller_ActionController {

	/**
	 * 
	 * @param Tx_MyContactform_Domain_Model_ContactFormItem $newContactFormItem
	 * @dontvalidate $newContactFormItem
	 * @return void
	 */
	public function showFormAction(Tx_MyContactform_Domain_Model_ContactFormItem $newContactFormItem = NULL)
	{
		$this->view->assign('newContactFormItem', $newContactFormItem);
	}

	/**
	 * 
	 * @param Tx_MyContactform_Domain_Model_ContactFormItem $newContactFormItem
	 * @return void
	 */
	public function submitFormAction(Tx_MyContactform_Domain_Model_ContactFormItem $newContactFormItem)
	{
		$this->contactFormItemRepository->add($newContactFormItem);
		$this->redirect('exitForm');
	}

...
}
?>
```

Wenn ich das Formular jetzt mit leeren Company-Feld abschicke, erhalte ich folgende Fehlermeldung:

> **An error occurred while trying to call Tx_MyContactform_Controller_ContactFormItemController->submitFormAction()**

Diese Meldung erscheint, weil die "submitFormAction" Methode aufgerufen wurde und einen Parameter erwartet den sie nicht bekommen hat.

**Aber:** die Methode dürfte eigentlich noch gar nicht aufgerufen werden, da dass Formular nicht sauber ausgefüllt wurde (leeres Company-Feld). Eine entsprechende Fehlermeldung des Validators fehlt.

Was habe ich falsch gemacht? Wieso wird nicht ordentlich validiert?

## Antworten

### [#2](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/2) · kainobi · 2012-11-09

Hast Du den neuen PropertyMapper aktiviert (plugin.tx_mycontactform.features.rewrittenPropertyMapper = 1)? Wenn ja, dann muss die Annotation **@ignorevalidation $newContactFormItem** heissen, nicht @dontvalidate $newContactFormItem.

### [#3](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/3) · Unbekannter Benutzer · 2012-11-09

> **kainobi schrieb:**
>
> Hast Du den neuen PropertyMapper aktiviert (plugin.tx_mycontactform.features.rewrittenPropertyMapper = 1)? Wenn ja, dann muss die Annotation **@ignorevalidation $newContactFormItem** heissen, nicht @dontvalidate $newContactFormItem.

Danke für den Tipp! Das Problem ist teilweise gelöst.

Ich habe den PropertyMapper im TS der Extension aktiviert und die Annotation wie von dir beschrieben umgestellt. Nun erhalte ich folgende Ausgabe im FE:

> An error occurred while trying to call Tx_MyContactform_Controller_ContactFormItemController->submitFormAction()
>
> newContactFormItem.company: Das Feld ist leer! (#1352401445)
> newContactFormItem.email: The given subject was not a valid email address. (#1221559976)

D.h. die gewünschten Fehlermeldung wegen nicht bestandener Validierung erscheinen, jedoch steht da immer noch die Meldung, dass die Methode "sendFormAction" aufgerufen werden konnte?!

Woran könnte das noch liegen?

### [#4](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/4) · kainobi · 2012-11-09

Bin mir nicht sicher. Am besten Du setzt hier an: Tx_Extbase_MVC_Controller_ActionController::errorAction()
Da siehst Du, dass bei einem Fehler eigentlich der Referrer aus dem Request-Objekt ausgelesen und dann ein forward an diese Action (bei Dir also die showFormAction) gemacht werden sollte. Wenn das funktioniert, ist auch diese "An error occurred ..." Meldung nicht sichtbar.

Ich würde das mal debuggen, und schauen ob evt. der Referrer nicht ausgelesen werden kann (der kommt glaube ich aus einem Hidden Field namens "__referrer" in der Form).

### [#5](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/5) · Unbekannter Benutzer · 2012-11-09

Ok, danke für den Tipp. Werde mir das mal anschauen. Hört sich nach ner falschen Server- bzw. PHP-Config an, oder?

### [#6](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/6) · kainobi · 2012-11-09

Glaube eher nicht dass das an einer Server-Config liegt. Verwendest Du <f:form> oder ein normales Form-Tag?

### [#7](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/7) · Unbekannter Benutzer · 2012-11-09

Ich nutze die Fluid Schreibweise, also:

Das steht im Layout "ShowForm.html"

```html
<f:form action="submitForm" method="post" name="newContactFormItem" object="{newContactFormItem}">
<f:render partial="ContactFormItem/FormFields" arguments="{salutationValues:salutationValues}" />
	<f:form.submit value="Create new" />
</f:form>
```

Dazu das Partial "FormFields.html"

```html
<label for="company">
	<f:translate key="tx_bycontactform_domain_model_contactformitem.company" /> <span class="required">(required)</span>
</label><br />
	<f:form.textfield property="company" /><br />
<label for="salutation">
	<f:translate key="tx_bycontactform_domain_model_contactformitem.salutation" />
</label><br />
	<f:form.select property="salutation" options="{salutationValues}" /> <br />
<label for="firstname">
	<f:translate key="tx_bycontactform_domain_model_contactformitem.firstname" />
</label><br />
	<f:form.textfield property="firstname" /><br />
<label for="lastname">
	<f:translate key="tx_bycontactform_domain_model_contactformitem.lastname" />
</label><br />
	<f:form.textfield property="lastname" /><br />
<label for="email">
	<f:translate key="tx_bycontactform_domain_model_contactformitem.email" /> <span class="required">(required)</span>
</label><br />
	<f:form.textfield property="email" /><br />
```

Im Grunde habe ich mit dem Extension Builder die Extension erstellt und erweitert. Die Datei Struktur stimmt eigentlich größtenteils noch überein.

### [#8](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/8) · kainobi · 2012-11-09

Sehe hier keinen Fehler. Schau mal ob im Quellcode der "__referrer" als Hidden Field drin ist. Ansonsten würde ich wie oben beschrieben die errorAction debuggen.

### [#9](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/9) · Unbekannter Benutzer · 2012-11-09

Sorry, konnte leider nicht früher antworten.

Also, im HTML Output steht folgendes:

```html
<div style="display: none">
<input type="hidden" name="tx_mycontactform_pi1[__referrer][@extension]" value="MyContactform" />
<input type="hidden" name="tx_mycontactform_pi1[__referrer][@controller]" value="ContactFormItem" />
<input type="hidden" name="tx_mycontactform_pi1[__referrer][@action]" value="showForm" />
<input type="hidden" name="tx_mycontactform_pi1[__referrer][arguments]" value="YTowOnt901c18b8bf1fe4466276e95f7d39bc1ebee96e406" />
<input type="hidden" name="tx_mycontactform_pi1[__hmac]" value="a:3:{s:18:&quot;newContactFormItem&quot;;a:5:{s:7:&quot;company&quot;;i:1;s:10:&quot;salutation&quot;;i:1;s:9:&quot;firstname&quot;;i:1;s:8:&quot;lastname&quot;;i:1;s:5:&quot;email&quot;;i:1;}s:6:&quot;action&quot;;i:1;s:10:&quot;controller&quot;;i:1;}b93b777cbfad0fe376d87b98735a2122e94eb0d4" />
</div>
```

"__referrer" steht also drin. Ich werde mal Debuggen und schauen was bei rauskommt.

### [#10](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/10) · Unbekannter Benutzer · 2012-11-09

Ok, ich habe jetzt einiges debugged. Zu folgendem Schluss bin ich nun gekommen.

In der "Tx_Extbase_MVC_Controller_ActionController::errorAction()" kommen alle Daten sauber an, auch ein "forward" wird aufgerufen. D.h. die Validierung funktioniert, denn im "$referringRequest" Object, welches der "forward" Methode übergeben wird, steht als Action "showForm" und nicht "submitForm".

Die "forward" Methode ist in der Klasse "Tx_Extbase_MVC_Controller_AbstractController" definiert:

```php
<?php
public function forward($actionName, $controllerName = NULL, $extensionName = NULL,
			array $arguments = NULL) {

	$this->request->setDispatched(FALSE);
	$this->request->setControllerActionName($actionName);
	if ($controllerName !== NULL)
		$this->request->setControllerName($controllerName);
	if ($extensionName !== NULL)
		$this->request->setControllerExtensionName($extensionName);
	if ($arguments !== NULL)
		$this->request->setArguments($arguments);
	throw new Tx_Extbase_MVC_Exception_StopAction();

}
?>
```

Gebe ich hier das "$request" Object aus, erhalte ich folgende Daten: hier steht als controllerAction "submitForm". Diese Information wird zwar nicht in der "forward" Methode genutzt, aber vielleicht hat das ja wo anders dann seinen Einfluss?!

```php
Extbase Variable Dump

Tx_Extbase_MVC_Web_Requestprototype object
   hashService => Tx_Extbase_Security_Cryptography_HashServicesingleton object
   format => 'html' (4 chars)
   method => 'POST' (4 chars)
   requestUri => 'https://www.mydomain/de/kontakt/anfahrt-kontakt.html?tx_mycontactform_p
      i1%5Baction%5D=submitForm&tx_mycontactform_pi1%5Bcontroller%5D=ContactFo
      rmItem&cHash=9e2e56777f1c4a856f2da71cb9416da8' (193 chars)
      
   baseUri => 'https://www.mydomain.de/' (26 chars)
   hmacVerified => TRUE
   isCached => FALSE
   configurationManager => Tx_Extbase_Configuration_ConfigurationManagersingleton object
   controllerObjectNamePattern => 'Tx_@extension_@subpackage_Controller_@controllerController' (58 chars)
   pluginName => 'Pi1' (3 chars)
   controllerExtensionName => 'MyContactform' (13 chars)
   controllerSubpackageKey => NULL
   controllerName => 'ContactFormItem' (15 chars)
   controllerActionName => 'submitForm' (10 chars)
   
   arguments => array (3 items)
      action => 'submitForm' (10 chars)
      controller => 'ContactFormItem' (15 chars)
      newContactFormItem => array (5 items)
      
   internalArguments => array (2 items)
   dispatched => TRUE
   originalRequest => Tx_Extbase_MVC_Web_Requestprototype object
   originalRequestMappingResults => Tx_Extbase_Error_Resultprototype object
   errors => array (empty)
```

Das ShowForm.html Template sieht folgendermaßen aus:

```html
<f:layout name="Default" />
<f:section name="main">
<h1>Kontaktformular</h1>

<f:flashMessages />

<f:render partial="FormErrors" arguments="{object:ContactFormItem}"/>

<f:form action="submitForm" method="post" name="newContactFormItem" object="{newContactFormItem}">
<f:render partial="ContactFormItem/FormFields" arguments="{salutationValues:salutationValues}" />
	<f:form.submit value="Create new" />
</f:form>

</f:section>
```

Die Fehlermeldung

> An error occurred while trying to call Tx_MyContactform_Controller_ContactFormItemController->submitFormAction()

kommt aus **<f:flashMessages />**. Wenn ich das einfach weglasse, erhalte ich nur die Validierungsmeldungen aus der Extension.

Aber ich kann das ja nicht einfach weglassen. Die Fehlermeldung muss ja irgendwo generiert werden.
Aber wo?! Und warum?

### [#11](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/11) · kainobi · 2012-11-10

Sorry, da war ich jetzt auf dem Holzweg. Ich hab mir jetzt nochmal die errorAction genauer angesehen.

Das ist schon alles korrekt so wie´s ist. Diese Meldung kommt aus der Methode Tx_Extbase_MVC_Controller_ActionController::getErrorFlashMessage(). Die wird bei mir in der errorAction() in Zeile 446 aufgerufen. Wenn Du diese Meldung nicht sehen willst, kannst Du die getErrorFlashMessage() Methode in deinem Controller überschreiben, so dass sie gar keinen oder einen anderen Text zurückgibt, oder halt den FlashMessages VH weglassen, aber Letzteres würde ich eher nicht machen.

Hoffe das hilft Dir weiter.

### [#12](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/12) · Unbekannter Benutzer · 2012-11-10

Hi,

ok vielen Dank für deine Mühe!

Aber das Problem ist ja damit nicht wirklich gelöst, oder?! Wenn ich die getErrorFlashMessage() in meiner Klasse einfach überschreiben, dann unterdrücke ich ja nur die Ausgabe, aber generiert wird die Fehlermeldung ja dennoch.

Ich hab gestern mit dem Extension Builder noch mal eine neue Extension mit drei Formularfeldern erstellt (alle auf "required" gesetzt). Das einzige was ich daran geändert habe, war, im TS das "rewrittenPropertyMapper" zu aktivieren und im Controller anstelle von "@dontvalidate $var" "@ignorevalidation $var" zu schreiben (Extbase ist da wohl noch nicht auf dem neuesten Stand).

Wenn ich dann die Extension im Frontend aufrufe und leer absende, erhielt ich genau die gleiche Fehlermeldung aus den FlashMessages!

Kann es also sein, dass es ein Extbase/TYPO3 Bug ist?

### [#13](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/13) · kainobi · 2012-11-10

Hm, ich glaube ich stehe auf der Leitung :-)
Meinst Du, Du weisst nicht was diese Fehlermeldung bedeutet bzw. was sie auslöst? Das ist nur ein zusätzlicher Hinweis, dass beim Aufruf Deiner submitFormAction was schiefgelaufen ist, in diesem Falle die Validierung (siehe ab Zeile 279 in der ActionController Klasse). Darum meinte ich auch, dass Du die Methode einfach überschreiben kannst, um anstelle dessen gar nix oder was anderes anzuzeigen.

Ich glaube jetz hammas, oder? ;-)

### [#14](https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig/14) · Unbekannter Benutzer · 2012-11-10

Ach du meinst, diese Meldung ist beabsichtig?! Ich dachte die ganze Zeit, da läuft tatsächlich irgendwas schief. Also wenn das Verhalten beabsichtigt ist, finde ich das irgendwie unlogisch, denn, ich erhalte ja durch die Validierung entsprechende Ausgaben. Warum also noch mal explizit darauf hinweisen, dass die ursprünglich angesprochene Action (in meinem Fall "submitAction" nicht aufgerufen wurde?!

Aber zum Glück kann man die Error Messages abschalten. Habe das nun so in meine Controller-Klasse eingetragen:

```php
<?php

/**
 * Deactivate Error FlashMessages
 *
 * @see Tx_Extbase_MVC_Controller_ActionController::getErrorFlashMessage()
 * @return boolean
 */
protected function getErrorFlashMessage()
{
	return FALSE;
}

?>
```

---

Quelle: „Extbase: Validierung von Formularfeldern funktioniert nicht richtig?!“, typo3.net, https://www.typo3.net/d/112732-extbase-validierung-von-formularfeldern-funktioniert-nicht-richtig
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
