[Catalyst] Re: Needs some help with select and
Controller::FormBuilder
Stephen Sykes
stephen at stephensykes.us
Tue Feb 26 21:21:16 GMT 2008
Alex Povolotsky wrote:
> Hello!
>
> I'm trying to make a form with select using Controller::FormBuilder.
>
> Code is quite straightforward
>
>
> === edit.fb ===
> name: server_edit
> method: post
> fields:
> name:
> label: Server Name
> required: 1
> type: text
> size: 60
> descr:
> label: Description
> type: textarea
> rows: 4
> cols: 60
> ipid:
> label: IP
> type: select
> required: 1
> === edit.fb ===
>
> === from Server.pm ===
> sub edit : Local Form {
> my ($self, $c, $lid, $sid) = @_;
> if (!defined $lid) {
> $c->response->redirect($c->uri_for('/location/list'));
> $c->detach();
> }
> my $form = $self->formbuilder;
> my $iplist = $c->model('OurIP')->search(undef,
> {columns =>
> [qw /ipid ipaddr/],
> order_by => 'ipaddr'});
> $c->log->info(join(', ', map { $_->ipid.' '.$_->ipaddr } $iplist->all));
> $form->field(name=>'ipid',
> type => 'select',
> options =>
> [ map { [ $_->ipid, $_->ipaddr] } $iplist->all ],
> # other => 1, # create "Other:"
> box );
>
> # No processing yet
> }
> === from Server.pm ===
>
> Looks OK, doesn't it?
>
> Debug shows
>
> [CGI::FormBuilder::Field::select::tag] (debug2) ipid: generating select
> input type
> [CGI::FormBuilder::Field::tag_value] (debug2) ipid: called
> $field->tag_value
> [CGI::FormBuilder::Field::tag_value] (debug2) ipid: sticky && ! force
> [CGI::FormBuilder::Field::cgi_value] (debug2) ipid: called
> $field->cgi_value
> [CGI::FormBuilder::Field::tag_value] (debug2) no cgi found, returning
> def_value
> [CGI::FormBuilder::Field::def_value] (debug2) ipid: called
> $field->def_value
> [CGI::FormBuilder::Field::def_value] (debug2) ipid: def value = ()
> [CGI::FormBuilder::Field::inflate_value] (debug2) ipid: called
> $field->inflate_value
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94cfd54))
> = (,-select-,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b27fc))
> = (1,88.212.221.66,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94335cc))
> = (23,88.212.221.67,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2b68))
> = (24,88.212.221.68,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2bb0))
> = (26,88.212.221.69,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94a3eec))
> = (31,88.212.221.71,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94a3f04))
> = (28,88.212.221.72,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94a3fc4))
> = (27,88.212.221.73,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2010))
> = (30,88.212.221.74,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2070))
> = (2,88.212.221.75,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2088))
> = (29,88.212.221.76,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2100))
> = (3,88.212.221.77,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b213c))
> = (4,88.212.221.78,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94334f4))
> = (5,88.212.221.79,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2160))
> = (17,88.212.221.81,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b21b4))
> = (6,88.212.221.82,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b22b0))
> = (10,88.212.221.83,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b22e0))
> = (11,88.212.221.84,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b22f8))
> = (12,88.212.221.85,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b231c))
> = (13,88.212.221.86,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b279c))
> = (7,88.212.221.88,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2ab4))
> = (8,88.212.221.89,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94a367c))
> = (25,88.212.221.90,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b25a4))
> = (21,88.212.221.92,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b25e0))
> = (14,88.212.221.93,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2040))
> = (16,88.212.221.94,)
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x94b2358))
> = (9,88.212.221.95,)
> [CGI::FormBuilder::Field::select::tag] (debug2) ipid: generated tag =
> <select id="ipid" name="ipid">
> <option value="">-select-</option>
> <option value="1">88.212.221.66</option>
> <option value="23">88.212.221.67</option>
> <option value="24">88.212.221.68</option>
> <option value="26">88.212.221.69</option>
> <option value="31">88.212.221.71</option>
> <option value="28">88.212.221.72</option>
> <option value="27">88.212.221.73</option>
> <option value="30">88.212.221.74</option>
> <option value="2">88.212.221.75</option>
> <option value="29">88.212.221.76</option>
> <option value="3">88.212.221.77</option>
> <option value="4">88.212.221.78</option>
> <option value="5">88.212.221.79</option>
> <option value="17">88.212.221.81</option>
> <option value="6">88.212.221.82</option>
> <option value="10">88.212.221.83</option>
> <option value="11">88.212.221.84</option>
> <option value="12">88.212.221.85</option>
> <option value="13">88.212.221.86</option>
> <option value="7">88.212.221.88</option>
> <option value="8">88.212.221.89</option>
> <option value="25">88.212.221.90</option>
> <option value="21">88.212.221.92</option>
> <option value="14">88.212.221.93</option>
> <option value="16">88.212.221.94</option>
> <option value="9">88.212.221.95</option>
> </select>
> [CGI::FormBuilder::Field::type] (debug2) ipid: called $field->type
> (manual = 'select')
> [CGI::FormBuilder::prepare] (debug2) $tmplvar{jshead} = $self->script
> [CGI::FormBuilder::field] (debug2) called $form->field()
> ...
> but later
> [CGI::FormBuilder::Field::inflate_value] (debug2) ipid: called
> $field->inflate_value
> [FormBuilder] Warning: ipid: No options specified for 'select' field at
> /usr/local/lib/perl5/site_perl/5.8.8/CGI/FormBuilder.pm line 1332
> [CGI::FormBuilder::Field::select::tag] (debug2) optval(ARRAY(0x95bd838))
> = (,-select-,)
> [CGI::FormBuilder::Field::select::tag] (debug2) ipid: generated tag =
> <select id="ipid" name="ipid">
> <option value="">-select-</option>
> </select>
> [CGI::FormBuilder::Field::type] (debug2) ipid: called $field->type
> (manual = 'select')
>
> and, indeed, no IP address is available with select.
>
> What could be wrong?
>
> Alex.
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
>
Why not map directly from your model...
$self->formbuilder->field(
name => 'ipid',
options =>
[ map { [ $_->ipid, $_->ipaddr ] } $c->model('OurIP')->all ],
);
More information about the Catalyst
mailing list