it-swarm.com.de

Programmgesteuertes Verwenden von Formularregeln zum Überprüfen von Daten außerhalb eines Formulars

Ich habe eine Komponente erstellt, in der ein Administrator Benutzer per Bulk-Upload hochladen kann, und ich möchte die E-Mail-Adressen überprüfen, bevor ich diese Benutzer erstelle.

Die XML-Definition des Formulars zum Erstellen oder Ändern eines Benutzers (administrator/components/com_users/models/forms/user.xml) Hat das Attribut validate=email Im E-Mail-Feld. Dies bedeutet, dass Joomla seine Klasse Joomla\CMS\Form\Rule\EmailRule Verwendet, um alle Eingaben aus dem E-Mail-Formularfeld zu überprüfen.

Ich möchte die Klasse Joomla\CMS\Form\Rule\EmailRule Nutzen, um die hochgeladenen E-Mail-Adressen zu überprüfen.

1
Dom

Es ist möglich, Joomla\CMS\Form\Rule\EmailRule Direkt im Code zu verwenden. Instanziieren Sie es einfach und rufen Sie dann die Methode test auf. Die Methode test erfordert zwei Argumente, ein SimpleXMLElement, das das Feld-Tag definiert, für das der Wert getestet werden soll. Um eine Reihe hochgeladener E-Mail-Adressen zu überprüfen, verwenden Sie den Code

$emails; //an array of email addresses
$email_validator = new \Joomla\CMS\Form\Rule\EmailRule();
$field_element = simplexml_load_string('<field name="email" type="email" validate="email" />');
foreach( $emails as $email ) {
    if( !$email_validator->test($field_element, $email) ) {
        //deal with failed email validation
    }
}

Wenn Sie die Klasse Joomla\CMS\Form\Rule\EmailRule Überprüfen, sucht das SimpleXMLElement nur nach den Attributen 'erforderlich', 'mehrfach', 'tld' und 'eindeutig'. Wenn Sie diese also nicht benötigen, können Sie einfach die Funktion simplexml_load_string('<field/>);

Mithilfe der Feldelementdefinition können Sie das Verhalten der Regel leicht ändern. Wenn Sie beispielsweise Joomla\CMS\Form\Rules\PasswordRule Zum Überprüfen von Kennwörtern verwenden möchten, können Sie die SimpleXMLElement-Zeichenfolge so anpassen, dass eine minimale Gesamtlänge oder Anzahl von Symbolen erforderlich ist. Der Code würde folgendermaßen aussehen:

$field_element = simplexml_load_string('<field minimum_length="15" minimum_symbols="3" />');
1
Dom