Beispiel:
/**
* The firstname
*
* @var string
* @Flow\Validate(type="String")
* @Flow\Validate(type="NotEmpty")
*/
protected $firstname;
Die Eigenschaft "firstname" muss ein String und darf nicht leer sein. Erstellt man dafür nun ein Formular, würde das so aussehen.
<f:form action="create" controller="Register">
<label for="firstname">Firstname:</label>
<f:form.textfield=" id="firstname" name="data[firstname]" property="firstname" />
<f:form.submit value="Submit" />
</f:form>
Um die Validierungsergebnisse auszugeben, muss das Formular wie folgt ergänzt werden.
<f:flashMessages />
<f:form.validationResults for="data">
<f:if condition="{validationResults.flattenedErrors}">
<div class="error">
<f:for each="{validationResults.flattenedErrors}" key="propertyPath" as="errors">{propertyPath}: <f:for each="{errors}" as="error">{error}</f:for></f:for>
</div>
</f:if>
</f:form.validationResults>
Wenn man die das Formular nun absendet, erhält man in den validationResults die Meldungen bzgl. des Domain-Models. Aber im flashMessage Container erscheint noch eine nicht sehr schöne Fehlermeldung von TYPO3 Flow.
An error occurred while trying to call Your\Package\Controller\RegisterController->createAction()
Diese Meldung kann man überschreiben, indem man im Controller die Methode getErrorFlashMessage() überschreibt.
/**
* @return \TYPO3\Flow\Error\Message
*/
protected function getErrorFlashMessage() {
switch ($this->actionMethodName) {
case 'createAction' :
return new \TYPO3\Flow\Error\Message('Could not save form, because some fields are not filled out correctly');
default:
return parent::getErrorFlashMessage();
}
}
Abhängig von der aufgerufenen Action, kann man die ausgegebene Fehlermeldung überschreiben.