isUnique validation with Lithium
This validation rule allows you to validate unique values of any field in any model.
Mariano Iglesias posted an updated version of the validator rule, which supports existing records. Here is the updated version.
<?php
/**
* isUnique validator for any model. Example usage in model:
*
* public $validates = array(
* 'email' => array('isUnique', 'message' => 'This email is already used')
* );
*/
Validator::add('isUnique', function ($value, $format, $options) {
$conditions = array($options['field'] => $value);
foreach((array) $options['model']::meta('key') as $field) {
if (!empty($options['values'][$field])) {
$conditions[$field] = array('!=' => $options['values'][$field]);
}
}
$fields = $options['field'];
return is_null($options['model']::find('first', compact('fields', 'conditions')));
});
?>