Manchmal ist es bei der Validierung eines Models erforderlich, unterschiedliche Objekt-Eigenschaften gegeneinander zu vergleichen. Beispiele sind z.B. die Eingabe von Passwort und Passwort-Bestätigung bei einer Benutzerregistrierung oder die Verifizierung einer E-Mail Adresse durch doppelte Eingabe. Da man bei dieser Form der Validierung Zugriff auf mehrere Objekt-Eigenschaften benötigt, muss eine eigene Validator-Klasse implementiert werden. In dieser können dann beliebig viele Validierungsregeln ausgeführt werden.

\Vendor\Ext\Domain\Validator\UserValidator.php

class UserValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {

    /**
     * Object Manager
     * 
     * @var \TYPO3\CMS\Extbase\Object\ObjectManager
     * @inject
     */
    protected $objectManager;     
    
    /**
     * Is valid
     * 
     * @param mixed $user
     * @return boolean
     */
    public function isValid($user) {
        if ($user->getPassword() !== $user->getPasswordConfirmation()) {
            $error = $this->objectManager->get(
                    'TYPO3\CMS\Extbase\Validation\Error', 
                    'Password and password confirmation do not match.', time());
            $this->result->forProperty('passwordConfirmation')->addError($error);                
            return FALSE;
        }
        return TRUE;
    }
    
}

\Vendor\Ext\Controller\UserController.php

/**
 * action create
 * 
 * @param \Vendor\Ext\Domain\Model\User $user
 * @validate $user \Vendor\Ext\Domain\Validator\UserValidator
 * 
 * @return void
 */
public function createAction(\Vendor\Ext\Domain\Model\User $user) {

}