[Html-widget] Status of HTML::Widget?
Dave Morriss
m.paradoxa at gmail.com
Fri Feb 9 20:43:19 GMT 2007
On 2/9/07, Carl Franks <fireartist at gmail.com> wrote:
> Yes, HTML::Widget seems to be in limbo at the moment.
>
> I've just made public my intended replacement, called HTML::FormFu.
Carl,
Thanks for the clarification. I'll wait and watch developments for a while.
> > I'm quite new to the intricacies of building such applications, and am
> > a bit thrown by some aspects of H::W.
>
> Could you expand on that any further, and I'll see it it's anything
> I've already dealt with?
My problem is with constraints. My application is heavily derived from
the Catalyst tutorial code and I have a form I'm using to edit user
and role details. I populate this with data from the database, except
for the encrypted password. I want to accept non-password changes
and/or a new password.
I have no constraints or filters, yet the form fails to validate
unless I provide a new password. It's as if there's a "phantom" 'All'
constraint there which I can't remove.
What's happening?
---- Start Code----
sub make_edit_widget {
my ($self, $c, $user, $roles) = @_;
# Create an HTML::Widget to build the form
my $w = $c->widget('user_form')->method('post');
# Use custom class to render each element in the form
$w->element_container_class('FormElementContainer');
# Get all known roles from the database
my @roleObjs = $c->model("CalendarDB::Roles")->all();
my @roles = map {$_->id => $_->role} sort {$a->id cmp $b->id} @roleObjs;
# Get the team list from the database
my @teamObjs = $c->model("CalendarDB::Teams")->all();
my @teams = map {$_->id => $_->name} sort {$a->name cmp $b->name} @teamObjs;
# Extract the user's roles
my @role_ids;
while (my $role = $roles->next) {
push(@role_ids,$role->role_id->id);
}
# Create the form fields. We show the username but don't accept any edits.
$w->element('Textfield','first_name')->label('First
Name')->size(40)->value($user->first_name);
$w->element('Textfield','last_name')->label('Last
Name')->size(40)->value($user->last_name);
$w->element('Textfield','username')->label('Username')->size(10)->value($user->username)->
attributes({readonly=>'readonly'});
$w->element('Textfield','passwd')->label('Password')->size(20);
$w->element('Textfield','email_address')->label('Email')->size(40)->value($user->email_address);
$w->element('Select','team_id')->label('Team')->options(@teams)->selected($user->team_id->id);
$w->element('Select','roles')->label('Roles')->options(@roles)->
multiple(1)->size(3)->selected(@role_ids);
$w->element('Submit','submit')->value('submit');
# Return the widget
return $w;
}
----End Code----
Thanks for any clues,
Dave
More information about the Html-widget
mailing list