The filter validator isn't actually a validator, it's a filter :) You give it a php function name to run, and it will run that function on the value of the attribute, when validate() is called.
class Address extends CFormModel /* or CActiveRecord */
{
public $postal_code;
public $street;
public function rules()
{
return array(
//call trim() when validate() is called
array('street', 'filter', 'filter'=>'trim'),
/* call my custom function filterPostalCode when validate() is called
* you can pass it any callback function, but it should only have one parameter
*/
array('postal_code', 'filter', 'filter'=>array( $this, 'filterPostalCode' )),
/* if you are going to filter, then you should put the required validator last, as the validators are called in order */
array('postal_code, street', 'required'),
);
}
public function filterPostalCode($value)
{
//strip out non letters and numbers
$value = preg_replace('/[^A-Za-z0-9]/', '', $value);
return strtoupper($value);
}
}
Usage:$address = new Address; $address->postal_code ="m5w-1e6"; $address->street = " 123 main street "; $address->validate(); echo "$address->street $address->postal_code"; $address->postal_code ="/*-*/*-*/-"; $address->street = " "; $address->validate(); var_dump($address->errors);Output:
123 main street M5W1E6
array 'postal_code' => array 0 => string 'Postal Code cannot be blank.' (length=28) 'street' => array 0 => string 'Street cannot be blank.' (length=23)
thanks.
ReplyDeleteThanks indeed
ReplyDeleteVery good and nice explanation. It was really required for me.
ReplyDelete