Ich habe einen Validator für ein Kontaktformular geschrieben und sobald ein Feld fehlerhaft war, wurden die Fehlermeldungen doppelt ausgegeben. Der Controller hat die showAction zur Darstellung des Formulars:
/**
* @param Contactform $contactform
*/
public function showAction( $contactform = null) {
$this->view->assign('contactform', $contactform);
$this->view->assign('timestamp', time());
}
mit folgendem Template:
<f:form action="create" name="contactform" object="{contactform}" objectname="contactform">
<f:render arguments="{object:contactform}" partial="FormErrors">
<f:form.textfield id="name" name="name" property="name" required="true">
<f:form.textfield id="email" name="email" property="email" required="true">
Dieses Formular zeigt auf die createAction, die im Controller folgendermaßen aussieht:
/**
* @param Contactform $contactform
* @validate $contactform \Package\Extension\Domain\Validator\ContactformValidator
*/
public function createAction(Contactform $contactform){
$contactform->setPid($GLOBALS['TSFE']->id); //set pid to current page ID
$this->contactformRepository->add($contactform);
//redirect to thank you page...
}
Der zugehörige ContactformValidator sieht so aus:
getName()){
$this->addError(
$this->translateErrorMessage(
'tx_extension_domain_model_contactform.errors.required',
'extension'
), 111);
$isValid = false;
}
if(!$contactform->getEmail()){
$this->addError(
$this->translateErrorMessage(
'tx_extension_domain_model_contactform.errors.required',
'extension'
), 111);
$isValid = false;
}
return $isValid;
}
}
Das funktioniert soweit auch, aber jeder Fehler wird doppelt angezeigt. Ich habe lange gegoogelt (was wie immer bei Typo3 Problemen ungefähr so lustig wie eine Wurzelbehandlung war) und bin schließlich auf diesen Link gestoßen. Dort erklärt der Verfasser, dass Validatoren, die DOMAINNAMEValidator heißen, automatisch die Domain validieren. Darum war meine @validator Annotation zu viel. Ich habe sie entfernt und damit war das Problem gelöst.