[html-formfu] value not accepted

Carl Franks fireartist at gmail.com
Wed Sep 26 13:27:22 GMT 2007


On 26/09/2007, Mario Minati <mario.minati at googlemail.com> wrote:
> On Wednesday 26 September 2007 12:57:27 Josef Chladek wrote:
> > Am 26.09.2007 um 12:45 schrieb Carl Franks:
> > > On 26/09/2007, Josef Chladek <josef.chladek at gmail.com> wrote:
> > >> hello again,
> > >>
> > >> in my code:
> > >>
> > >> my $nick = $c->stash->{form}->get_field('nickname');
> > >> $nick->value($c->stash->{form}->param('username')) if length($c-
> > >>
> > >>> stash->{form}->param('nickname')) == 0;
> > >>
> > >> $c->stash->{form}->process;
> > >> $c->log->debug($c->stash->{form}->get_field('nickname')->value);
> > >>
> > >> in the debug output I can see that nickname is set to the username,
> > >> when the form is rendered, the nickname field stays empty - what am I
> > >> doing wrong?
> > >
> > > For text fields, value() is just an alias to default() - and default
> > > is ignored when rendering after a submission.
> > >
> > > I think either of these solutions should work:
> > >
> > >     $nick->default( $form->param('username') );
> > >     $nick->force_default(1);
> > >
> > > or
> > >
> > >     $form->add_valid( 'nickname', $form->param('username') );
> > >
> > > Carl
> >
> > the latter I'd tried before (and did not work), the solution with
> > force_default did it.
>
> You have to change
> $c->stash->{form}->input->{'nickname' }
> to get your behaviour, but that is a hack as it relies on the internal
> behaviour of FormFu, which might change.
>
> So Carl's way is nicer.
>
> In general I think we should create a filter that can do this work for fields
> that takes the value of an other field, as this is a common task.
>
> And we could create a shortcut like 'overwrite_value' to do this task in one
> function.

I think a filter would be a good idea.

I think rather than create a new method, I'll take a look at
add_valid(), and see why that doesn't work.

Carl



More information about the HTML-FormFu mailing list