[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