LSformRule: add possibility to throw custom exception to provide error details

This commit is contained in:
Benjamin Renard 2021-07-12 17:54:08 +02:00
parent 16c6d9fa6e
commit 988d744836
3 changed files with 46 additions and 22 deletions

View file

@ -3,14 +3,14 @@
<para>Cette section décrit la manière de configuer des règles de vérification <para>Cette section décrit la manière de configuer des règles de vérification
syntaxique sur les données des attributs. Ces règles seront utilisées pour vérifier syntaxique sur les données des attributs. Ces règles seront utilisées pour vérifier
que les valeurs saisies par un utilisateur dans un formulaire sont correctes.</para> que les valeurs saisies par un utilisateur dans un formulaire sont correctes.</para>
<programlisting linenumbering="unnumbered"> <programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>... <citetitle>Structure</citetitle>...
<![CDATA['check_data' => array ( <![CDATA['check_data' => array (
'[regle1]' => array( '[regle1]' => array(
'msg' => "[Message d'erreur]", 'msg' => "[Message d'erreur]",
'params' => array( 'params' => array(
// Paramètres de la règle // Paramètres de la règle
) )
), ),
... ...
@ -18,7 +18,7 @@
... ...
</programlisting> </programlisting>
<para>Le paramètre <parameter>check_data</parameter> est un tableau associatif <para>Le paramètre <parameter>check_data</parameter> est un tableau associatif
dont les clés sont les noms des règles de vérification syntaxique actives et les dont les clés sont les noms des règles de vérification syntaxique actives et les
valeurs associées sont des tableaux associatifs contenant les paramètres des valeurs associées sont des tableaux associatifs contenant les paramètres des
règles.</para> règles.</para>
@ -29,7 +29,7 @@ règles.</para>
<varlistentry> <varlistentry>
<term>msg</term> <term>msg</term>
<listitem> <listitem>
<simpara>Le message d'erreur à afficher lors que la règle n'est pas respectée.</simpara> <simpara>Le message d'erreur à afficher lors que la règle n'est pas respectée (optionel).</simpara>
</listitem> </listitem>
</varlistentry> </varlistentry>

View file

@ -395,13 +395,13 @@ class LSform extends LSlog_staticLoggerClass {
// Iter on rules and check element values with each of them // Iter on rules and check element values with each of them
foreach($this -> _rules[$element] as $rule) { foreach($this -> _rules[$element] as $rule) {
if ( $errors = LSformRule :: validate_values(
!LSformRule :: validate_values( $rule['name'], $values, $rule['options'], $this -> elements[$element]
$rule['name'], $values, $rule['options'], $this -> elements[$element] );
) if (is_array($errors)) {
) {
$retval = false; $retval = false;
$this -> setElementError($this -> elements[$element], $rule['options']['msg']); foreach ($errors as $error)
$this -> setElementError($this -> elements[$element], $error);
} }
} }
} }

View file

@ -48,18 +48,32 @@ class LSformRule extends LSlog_staticLoggerClass {
// Load PHP class (with error if fail) // Load PHP class (with error if fail)
if (!LSsession :: loadLSclass($rule_class)) { if (!LSsession :: loadLSclass($rule_class)) {
LSerror :: addErrorCode('LSformRule_02', $rule_name); return array(
return False; getFData(_('Invalid syntax checking configuration: unknown rule %{rule}.'), $rule_name)
);
} }
if (! $rule_class :: validate_one_by_one) $errors = false;
return $rule_class :: validate($values, $options, $formElement); try {
if (! $rule_class :: validate_one_by_one) {
foreach ($values as $value) { if (!$rule_class :: validate($values, $options, $formElement))
if (!$rule_class :: validate($value, $options, $formElement)) throw new LSformRuleException();
return False; }
else {
foreach ($values as $value) {
if (!$rule_class :: validate($value, $options, $formElement))
throw new LSformRuleException();
}
}
} }
return True; catch (LSformRuleException $e) {
$errors = $e->errors;
$msg = LSconfig :: get('msg', null, null, $options);
if ($msg || !$errors) {
$errors[] = ($msg?__($msg):_('Invalid value'));
}
}
return ($errors?$errors:true);
} }
/** /**
@ -77,12 +91,22 @@ class LSformRule extends LSlog_staticLoggerClass {
} }
class LSformRuleException extends Exception {
public $errors = array();
public function __construct($errors=array(), $code = 0, Throwable $previous = null) {
$this -> errors = ensureIsArray($errors);
$message = _("Invalid value");
if ($this -> errors)
$message .= ': '.implode(", ", $this -> errors);
parent::__construct($message, $code, $previous);
}
}
/** /**
* Error Codes * Error Codes
**/ **/
LSerror :: defineError('LSformRule_01', LSerror :: defineError('LSformRule_01',
___("LSformRule_%{type}: Parameter %{param} is not found.") ___("LSformRule_%{type}: Parameter %{param} is not found.")
); );
LSerror :: defineError('LSformRule_02',
___("LSformRule: Unknown rule type %{type}.")
);