public $defaultValue;
public $autoIncrement;
+ private $validator;
private $formatter;
public function __construct(array $column)
$this->formatter = $class;
}
+ public function registerValidator($class)
+ {
+ $this->validator = $class;
+ }
+
public function format($value, $badNullFallbackToDefault = false)
{
if (is_null($value)) {
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') {
}
}
-interface PlDBTableFieldFormatter extends XDBFormat
+interface PlDBTableFieldValidator
{
public function __construct(PlDBTableField $field, $value);
}
+interface PlDBTableFieldFormatter extends PlDBTableFieldValidator, XDBFormat
+{
+}
+
class DateFieldFormatter implements PlDBTableFieldFormatter
{
private $datetime;
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;
$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