[Html-widget] FormFu: creating multi form elements
Carl Franks
fireartist at gmail.com
Fri Apr 20 12:05:29 GMT 2007
On 20/04/07, Thorsten Domsch <tdomsch at gmx.de> wrote:
> I want to create a custom FormFu Element consisting out of a few ordinary HTMl Elements via formFu. Let's say a date combo consisting of three select boxes (Day,Month,Year named $self->name."_d", "_m" ,"_y"), creating something like this is easy, writing the three boxes in my template file childsplay, but how do i get formfu to correctly evaluate the three boxes as one (constraints, errormsgs ??) ??
Error messages should already be handled properly - meaning errors
from all sub-elements will be displayed together, in the same manner
as non-multi elements.
For an example, see the "Multi, 3 Select fields" element in this demo page:
http://www.fireartist.com/html-formfu-cssapp/form/view/with-errors/1
So if you want to check for a valid date, you would only need one
constraint added to one element, and then make the error message
appropriate for the 3 fields as a whole.
I haven't copied the old HTML::Widget::Constraint::Date into form,
because I wanted it to also support single-field dates, and not just
separate year/month/day fields.
The way I think I'd like to see it work, would be that if you're using
a single field for the whole date, that you'd use the same interface
as HTML::FormFu::Inflator::DateTime - providing an argument suitable
for DateTime::Format::Builder::parser()
---
elements:
- type: text
name: date
constraints:
- type: Date
parser:
strptime: '%d-%m-%Y'
or
---
elements:
- type: text
name: date
constraints:
- type: Date
parser:
regex: '^ (\d{2}) - (\d{2}) - (\d{4}) $/'
params: [day, month, year]
Or if you want to use 3 seperate fields, I think the constraint should
probably use the same other() interface as several other constraints
already do - as I plan to standardize this soon, and make them all use
a common base-class. (part of the reason for this is to help the work
I've been doing on the client-side JS constraints).
So, it's probably okay to say that the constraint has to be added to
the 'year' field, and others() names the 'month' and 'day' fields.
Like so:
---
elements:
- type: multi
elements:
- type: text
name: year
constraints:
- type: Date
others: [month, day]
- type: text
name: month
- type: text
name: day
Patches / commits to actually implement HTML::FormFu::Constraint::Date welcome!
Carl
More information about the Html-widget
mailing list