From 22b7e8d8006c368f2e416c13bbaeb2202f80aa7f Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Mon, 1 Nov 2010 21:06:29 +0100 Subject: [PATCH] PlDBTableEntry: add support for field validators. Signed-off-by: Florent Bruneau --- classes/pldbtableentry.php | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/classes/pldbtableentry.php b/classes/pldbtableentry.php index 8d9c038..cbeb7bf 100644 --- a/classes/pldbtableentry.php +++ b/classes/pldbtableentry.php @@ -74,6 +74,7 @@ class PlDBTableField public $defaultValue; public $autoIncrement; + private $validator; private $formatter; public function __construct(array $column) @@ -104,6 +105,11 @@ class PlDBTableField $this->formatter = $class; } + public function registerValidator($class) + { + $this->validator = $class; + } + public function format($value, $badNullFallbackToDefault = false) { if (is_null($value)) { @@ -114,7 +120,12 @@ class PlDBTableField return $this->defaultValue; } throw new PlDBBadValueException($value, $this, 'null not allowed'); - } else if (!is_null($this->formatter)) { + } + if (!is_null($this->validator)) { + $class = $this->validator; + new $class($this, $value); + } + if (!is_null($this->formatter)) { $class = $this->formatter; $value = new $class($this, $value); } else if ($this->type == 'enum') { @@ -154,11 +165,15 @@ class PlDBTableField } } -interface PlDBTableFieldFormatter extends XDBFormat +interface PlDBTableFieldValidator { public function __construct(PlDBTableField $field, $value); } +interface PlDBTableFieldFormatter extends PlDBTableFieldValidator, XDBFormat +{ +} + class DateFieldFormatter implements PlDBTableFieldFormatter { private $datetime; @@ -325,6 +340,12 @@ class PlDBTable return $this->field($field)->registerFormatter($class); } + public function registerFieldValidator($field, $class) + { + return $this->field($field)->registerValidator($class); + } + + public function defaultValue($field) { return $this->field($field)->defaultValue; @@ -552,6 +573,16 @@ class PlDBTableEntry extends PlAbstractIterable $this->table->registerFieldFormatter($field, $formatterClass); } + /** Register a custom validator for a field. + * + * A validator perform a pre-filter on the value of a field. As opposed to the formatters, it does + * not affects how the value is stored in the database. + */ + protected function registerFieldValidator($field, $validatorClass) + { + $this->table->registerFieldValidator($field, $validatorClass); + } + /** This hook is called when the entry is going to be updated in the db. * * A typical usecase is a class that stores low-level representation of -- 2.1.4