Here is an example from a piece of code I'm working on. Basically, this enforces a rule where an existing projects project number can't be changed:
class Project extends DataObject {
// fields, methods, etc
public function getCMSValidator() {
return new Project_Validator();
}
}
class Project_Validator extends RequiredFields {
protected $customRequired = array('Number');
/**
* Constructor
*/
public function __construct() {
$required = func_get_args();
if(isset($required[0]) && is_array($required[0])) {
$required = $required[0];
}
$required = array_merge($required, $this->customRequired);
parent::__construct($required);
}
function php($data) {
$valid = parent::php($data);
$number_SQL = Convert::raw2sql($data['Number']);
if(isset($_REQUEST['ctf']['childID'])) {
$id = $_REQUEST['ctf']['childID'];
} elseif(isset($_REQUEST['ID'])) {
$id = $_REQUEST['ID'];
} else {
$id = null;
}
$project = DataObject::get("Project", "`Number` = '{$number_SQL}'");
if($id) {
// Existing project, check that number hasn't changed.
$project = DataObject::get_by_id("Project", $id);
if($project->Number != $data['Number']) {
$this->validationError("Number", "Sorry, you cannot change the project number.");
$valid = false;
}
} else {
// New project, check it doesn't already exist.
if(DataObject::get("Project", "`Number` = '{$number_SQL}'")) {
$this->validationError("Number", "Sorry, this project number already exists.");
$valid = false;
}
}
return $valid;
}
}
So, if the the project exists and they try to change the project number, it will fail and return an error message. Hope this helps.