[html-formfu] labels from DBIC?

Josef Chladek josef.chladek at gmail.com
Tue Jul 8 12:13:55 BST 2008


Am 07.07.2008 um 16:48 schrieb Carl Franks:

> 2008/7/6 Josef Chladek <josef.chladek at gmail.com>:
>> hello list,
>>
>> is there a way to have formfu make dynamic labels, aka labels from a
>> dbic-row?
>
> okay, I've added support for this in the subversion repository.
>
> You can now add a 'label' model_config to any field or multi block,  
> like so:
> type: Multi
> model_config:
>   label: 'label-col'
>
> At the moment, if there's a relationship of the same name, it'll call
> $row->get_column($label) - otherwise it does $row->$label.
>
> This means it supports non-column accessors, but it also means that
> the column must be on the particular row that's being processed.
> (ie, you can't do 'table.col' to reference another table)
> Can anyone think of a sensible way to handle that?
>
> Thanks for the good idea.

carl, that's great! but I have a few problems getting the (label)data  
back to the form.
as I wrote before I have the following schemas:

__PACKAGE__->table('Matrix.Zeugnis');
__PACKAGE__->add_columns(qw/id user company companyname note/);
__PACKAGE__->utf8_columns(qw/companyname/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->might_have(company =>  
'Xatalyst::Schema::Matrix::MatrixCompanies');

__PACKAGE__->table('Matrix.ZeugnisUser');
__PACKAGE__->add_columns(qw/id vorname nachname description email pic  
country/);
__PACKAGE__->utf8_columns(qw/vorname nachname description/);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many(zeugnisnoten =>  
'Xatalyst::Schema::Matrix::Zeugnis', 'user');

__PACKAGE__->table('Matrix.Companies');
__PACKAGE__->add_columns(qw/id short_name long_name ... /);
__PACKAGE__->utf8_columns(qw/long_name/);
__PACKAGE__->set_primary_key('id');

I am able to get the companyname by using

- type: Repeatable
  nested_name: zeugnisnoten
  counter_name: count

  elements:
    - type: Hidden
      name: id

    - type: Multi
      model_config:
          label: companyname

but I have to eval line 243
  eval{$block->label( $dbic->$label );};

otherwise I get an error (I have 4 has_many rows, but it happens that  
it enters row 243 after getting the four rows successfully with  
"companyname" as label, which throws)

Caught exception in Cat::Controller::Zeugnis->get "Can't locate object  
method "company" via package "Cat::Model::Matrix::ZeugnisUser" at / 
Users/josef/perl5.10.0/lib/site_perl/5.10.0/HTML/FormFu/Model/DBIC.pm  
line 243."

because companyname is defined in Zeugnis but not ZeugnisUser

I can't find the reason, why the label would be generated n+1 times,  
so is the eval ok (nothing's missing in the form)...

and it would be fine to write company.long_name so I could use the  
might_have accessor, but I don't know how to change the code without  
disturbing the "normal" way...

thanks
josef




More information about the HTML-FormFu mailing list