In order to make this easy, a dedicated set of classes are available in the
SynCommons.pas
unit, and allow to define both filtering and
navigation.
They all will be children of any of two common ancestors,
named TSynValidate
and TSynFilter
classes:
TSQLRecord
field content validation is handled in the newTSQLRecord.Validate
virtual method, or via someTSQLValidate
classes;TSQLRecord
field content filtering is handled in the newTSQLRecord.Filter
virtual method, or via someTSQLFilter
classes.
Some "standard" classes are already defined in the SynCommons
and SQLite3Commons
unit, to be used for most common usage:
You have powerful validation classes for IP Address, Email (with TLD+domain name), simple regex pattern, textual validation, strong password validation...
Note that some database-related filtering are existing, like
TSynValidateUniqueField
which derivates from
TSynValidateRest
. Thanks to this kind of data-driven classes, you
can filter or validate data using all methods of the ORM, in pure Delphi code,
with no SQL code to write by hand.
Of course, the SQLite3UIEdit
unit now handles
TSQLRecord
automated filtering (using TSQLFilter
classes) and validation (using one of the TSQLValidate
classes).
The unique field validation is now in TSQLRecord. Validate
and
not in SQLite3UIEdit
itself (to have a better multi-tier
architecture).
To initialize it, you can add some filters/validators to your
TSQLModel
creation function:
function CreateFileModel(Owner: TSQLRest): TSQLModel; var Classes: array[0..high(FileTabs)] of TSQLRecordClass; i: integer; begin for i := 0 to high(FileTabs) do Classes[i] := FileTabs[i].Table; result := TSQLModel.Create(Classes,'synfile'); result.Owner := Owner; result.SetActions(TypeInfo(TFileAction)); result.SetEvents(TypeInfo(TFileEvent)); TSQLFile.AddFilterOrValidate('Name',TSQLFilterLowerCase); TSQLUser.AddFilterOrValidate('Email',TSQLValidateEmail); end;
Calling AddFilterOrValidate
method is enough to declare
the validation for the whole framework.
Feedback and comments are welcome in our forum.