Form validation rules

When creating a form, the fields described in Data types section are being used. No matter which method of form creation is used (from model / without model) fields have properties which are defined by default (it means the existence of these properties for these objects, so specific values may not be defined).

  • for all types of fields: "required", "must_match"
  • char: "regexp", "captcha", "length", "min_length", "max_length", "min_max_length", "unique"
  • int, float: "zero_allowed", "positive"
  • email, phone, url, redirect: "format", and also the properties inherited from "char"
  • text: the properties inherited from "char"
  • file, image: "allowed_extensions", "allowed_mime_types" (in the form of an array)

Based on these properties there is an initial basic validation of the form fields by "validate()" method.

//Specify the fields of a future form
$fields = array(array("Name", "char", "name", array("max_length" => 20)),
                array("Coupon code", "char", "cupon", array("length" => 8)),
                array("About", "text", "about"),
                array("Email", "email", "email", array("unique" => true)),
                array("Password", "password", "password", array("min_length" => 5)),
                array("Repeat a password", "password", "password-repeat", array("must_match" => "password")),
                array("Captcha", "char", "code", array("captcha" => "extra/captcha-simple/"))

//Create a form object
$form = new Form($fields);
 
//Specify mandatory fields 
$form -> setRequiredFields(array("name", "password", "password-repeat", "code"));
 
//Add one more field into form
$form -> addField(array("Photo", "image", "photo", array("files_folder" => "uploads")));
 
if(!empty($_POST))
{    
    $form -> getDataFromPost() -> validate();

    ...

}

During the fields validation the rules "max_length", "length", "required", "min_length", "must_match" for the appropriate fields will be activated. Based on specific situation, it is possible to redefine already specified (or existing, but empty) rules for the fields or to assign new ones.

Adding a new rule

To add a new rule you need to call "addRule()" method with an array of parameters in the following order:

  1. the name of a field (can also be an array or the "*" symbol for all fields)
  2. the name of property (name in the database)
  3. value of property for validation (if you pass a value as "->", then only the message will be changed and the rule remains in the previous condition, it's convenient when changing an error message for the fields validated by regular expressions: int, float, email, phone, url, redirect).
  4. a message which is displayed if validation was not passed (if this parameter wasn't passed, a default system message for this rule will be displayed instead).
//Make the field mandatory to fill in
$form -> addRule("cupon", "required", true, "Enter a coupon code for registration.");

//Make all fields mandatory to fill in
$form -> addRule("*", "required", true, "This field is to be filled in.");

//Add validation by regular expression
$form -> addRule("cupon", "regexp", "/^d+$/", "Coupon code may only contain digits.");

//Set the minimum length for the entered text
$form -> addRule("about", "min_length", 200, "For a story about yourself you need at least 200 symbols.");

//Set the max, length for several fields
$form -> addRule(array("name", "cupon", "email"), "max_length", 100, "Field length should not exceed 100 symbols.");

//Set a new message upon validation for unique e-mail address (instead of default message )
$form -> addRule("email", "unique", true, "This address is already in use by another user.");

//New message upon validation of correct e-mail address 
$form -> addRule("email", "format",  "/^[-a-z0-9_.]+@[-a-z0-9_.]+.[a-z]{2,5}$/i", "Enter a correct e-mail");
 
//New message (old format) on validation of correct e-mail address
$form -> addRule("email", "format", "->", "Enter a correct e-mail ");

//Validation of repeat password value 
$form -> addRule("password-repeat", "must_match", "password", "Wrong repeat password");

//Limitation on types of uploaded files
$form -> addRule("photo", "allowed_extensions", array("gif", "jpg"), "Select .gif or .jpg file");

Remove a rule

To delete a rule you need to pass 2 arguments into "removeRule()" method: the name of the field and the name of the rule that needs to be deleted.

//Do not check the max length 
$form -> removeRule("name", "max_length");
 
//Field is not required
$form -> removeRule("cupon", "required");
 
//Fields are not required
$form -> removeRule(array("name", "email"), "required");
 
//Remove validation of e-mail for unique value 
$form -> removeRule("email", "unique");
 
//Remove validation of all fields for max length
$form -> removeRule("*", "max_length");

Additional info about formats of email, phone, url, redirect fields

The field value of "url" type can't be simply numerical, and also consist of sequence of identical signs, different from alphabetic (for example "---" or "/-/") this is a mandatory rule no matter which format was specified. Below you can see the formats ("format" property) in the form of regular expressions, set by the system by default. They can be redefined by specifying appropriate properties using addRule method.

  • url - "/^[a-zd-]+$/"
  • redirect - "/^https?://(www.)?(([a-zd-]+.)+[a-z]{2,4}|localhost)((/|?).*)*$/"
  • email - "/^[-a-z0-9_.]+@[-a-z0-9_.]+.[a-z]{2,5}$/i"
  • phone - "/^[+ds()-]+$/"

Display validation errors

//Entering values into form and validation
if(!empty($_POST))
{    
    $form -> getDataFromPost() -> validate();

    ...

}
 
//Display all errors as one list 
echo $form -> displayErrors();
 
//Display a form as a table, errors are shown near fields
echo $form -> setDisplayWithErrors() -> display();
 
//Display a form as blocks, errors are shown near fields 
echo $form -> setDisplayWithErrors() -> displayVertical();