Mit dem folgenden Code im Custom Validator funktioniert es:
public function isValid($user): bool
{
$this->init();
$captchaValidator = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\In2code\Femanager\Domain\Validator\CaptchaValidator::class);
$captchaValidator->result = $this->result;
if ($captchaValidator->isValid($user)) {
$serversideValidator = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\In2code\Femanager\Domain\Validator\ServersideValidator::class);
$serversideValidator->result = $this->result;
return $serversideValidator->isValid($user);
}
return false;
}
Entgegen deiner Markierung auf GitHub entstand der Fehler an einer anderen Stelle:
Zeile 102 im AbstractValidator
, der Klasse von der alle Validatoren erben.
Da er versucht die Funktion addError()
eines nicht existenten Objektes aufzurufen wird klar, dass $this->result
in unserem Spezialfall nicht definiert wurde.
Normalerweise setzt die Methode validate()
die result
-Variable eines Validators. Der Aufruf dieser Methode aus dem Custom Validator direkt heraus bewirkte allerdings, dass dann die Anmeldung immer erfolgreich ist. Ganz genau erklären kann ich das Verhalten noch nicht, dazu müsste ich in die Tiefen der Extbase Validator Implementierung abtauchen.
Ich habe es mir nun einfach gemacht und per "Try and Error" zeigte sich, dass ich auch einfach die result
-Variable des Custom Validators selbslt übergeben kann wie in meinem o.g. Code. Anschließend scheint die Validierung wie gewünscht zu laufen.
Wenn ein erfahrener Extbase Entwickler das hier ließt würde ich mich über eine Erklärung des Verhaltens freuen und ob dieser Workaround akzeptabel ist ☺️.