[Catalyst] Only call individual fields by number?

Ascii King tech at swattermatter.com
Tue Dec 16 21:31:15 GMT 2008

I see now why my question was not answered. It has been asked about 
twelve times on these boards and no answer has been found. I'll post 
what I have found for the sake of anyone following the same route I did.

FormBuilder with Catalyst will not allow you to reference an individual 
field using any of the following lines:

[% FormBuilder.field.<fieldname>.tag %]
[% FormBuilder.field.<fieldname>.field %]
[% FormBuilder.tag('<fieldname>') %]
[% FormBuilder.field('<fieldname>').tag %]

where <fieldname> is the name of the field you specified in the source 
file. The following line:

[% FormBuilder.field('<fieldname>') %]

will just give you the name of the field. It basically just returns 
whatever you have between the quotes.

You can only call individual fields by referring to the array index, 
like this:

[% FormBuilder.field.0.tag %]

where the 0 is the index number of the field you want.
The index number is determined by the order in which you put the fields 
into the source file, starting at zero. For example:

name: test

method: post


# 0


        label:    Client First Name

        type:    text

        required:    1

# 1


        label:    Client Last Name

        type:    text

        required:    1

This source file would put first_name at index 0 and last_name at index 
1.  The lines with # 0 and # 1 in the example are just comment lines I 
use to help me remember what the fields index is.

I hope this helps someone else and saves them the time I spent 
discovering this. If I'm wrong and someone has found an answer, please 
let me know.

Ascii King wrote:
> I can call my fields using this code:
> [% FOREACH thing IN FormBuilder.fields %]
> [% thing.tag %]
> [% END %]
> If I have a field named "fullname" I cannot call it individually with either
> of the following commands:
> [% FormBuilder.field.fullname.field %]
> [% FormBuilder.field.fullname.tag %]
> I can only call it like this:
> [% FormBuilder.field.0.tag %]
> I have been over the documentation and I feel I am putting it in the way I
> was told. The only thing I can see that might affect it is this bit of code.
>     my $form = CGI::FormBuilder->new(
>         fields => \@fields,
>         template => {
>              type => 'TT2',
>              template => 'form.tmpl',
>              variable => 'form'
>         },
>     );
> This code fails for me complaining that the variable 'fields' is not scoped
> properly. "Global symbol "@fields" requires explicit package name at "

More information about the Catalyst mailing list