J'essaie de faire la validation côté serveur avec une validation personnalisée pour les champs de téléphone et d'email. Je fais la validation personnalisée dans l'action formulaires.Silverstripe - retourne les données du formulaire après validation
Premièrement, est-ce le bon endroit pour le faire et deuxièmement, si oui, comment puis-je obtenir les données pour retourner au formulaire s'il ne répond pas à la validation?
Actuellement, tout le formulaire sera effacé.
public function doSubmitForm($data, Form $form) {
if (!preg_match("/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i",$data['Email'])) {
$form->addErrorMessage('Email', 'Invalid email', 'bad');
return $this->redirectBack();
}
if (!preg_match("/^((?:\+)|0)(\d{9,14})$/i",$data['Phone'])) {
$form->addErrorMessage('Phone', 'Please match the correct format eg: 0821234567', 'bad');
return $this->redirectBack();
}
$form->sessionMessage('Thank you for your submission','alert alert-success');
return $this->redirectBack();
}
Merci. Je vois que la validation par courriel est acceptable. Ce serait juste un numéro de téléphone dont je dois m'assurer qu'il y a au moins 10 caractères. J'ai lu au sujet de l'extension 'Validator'but ne pas le suivre exactement. '$ required = new RequiredFields (array ('Nom', 'Email', 'Téléphone')); $ form = new Form ($ this, 'MyForm', $ champs, $ actions); $ Form-> setValidator ($ required); ' Donc je dois faire un cours de téléphone personnalisé et faire la validation ici? – Craig
Je vous suggère de créer une sous-classe personnalisée de 'TextField', peut-être' PhoneField' et d'implémenter la méthode 'validate' ici (avec la validation de votre numéro de téléphone). Vous pouvez prendre le code de 'EmailField' comme point de départ ... – bummzack
pour valider les numéros de téléphone https://github.com/giggsey/libphonenumber-for-php pourrait être un bon outil. – wmk