[html-formfu] Constraint "Required" with condition "when" doesn't
work in apache-style config
Christoph Metz
mail-lao at web.de
Sat Nov 29 12:26:45 GMT 2008
Carl Franks wrote:
> 2008/11/28 Christoph Metz <mail-lao at web.de>:
>
>> Carl Franks wrote:
>>
>>> 2008/11/28 Christoph Metz <mail-lao at web.de>:
>>>
>>>
>>>> using an Require constraint whith the "when" condition doesn't work fine
>>>> for
>>>> me :/
>>>>
>>>> <element>
>>>> type Select
>>>> name kompetenzfeld_id
>>>> <constraint>
>>>> type Required
>>>> <when>
>>>> field extern
>>>> values 0
>>>> </when>
>>>> </constraint>
>>>> </element>
>>>>
>>>>
>>>> without the "<when>" part the Required constrain works correctly, maybe
>>>> the
>>>> syntax of my conf isn't correct, but this was the only variant,
>>>> (config-loader) formfu accepted so far...
>>>>
>>>>
>>> That config seems to work, looking at a dumped $form, so the problem
>>> must either be a misunderstanding of how it's meant to work, or a bug.
>>> Note that the when() doesn't yet support nested params, such as "foo.bar".
>>>
>>> Can you write a failing test file, that demonstrates what you expect
>>> to happen, to help start to narrow it down?
>>>
>>> Cheers,
>>> Carl
>>>
>>> _______________________________________________
>>> HTML-FormFu mailing list
>>> HTML-FormFu at lists.scsys.co.uk
>>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>>
>>>
>>>
>> thanks carl,
>>
>> the radio-button and the field asking for it with "when()" are nested in 2
>> divs... damn. Are there any other possibilities to do this kind of stuff,
>> without validating each param by myself AND with the ability to access these
>> magic method across blocks, like some divs?
>>
>
> If it's just normal nested Blocks without a nested_name set, then it
> should be fine.
> It's only nested-params that don't work - that's when an outer block
> has a nested_name(), such as:
>
> type: Block
> nested_name: foo
> elements:
> - type: Text
> name: bar
>
> Which would cause the Text field to actually get the name "foo.bar"
>
> Carl
>
> _______________________________________________
> HTML-FormFu mailing list
> HTML-FormFu at lists.scsys.co.uk
> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>
>
so, i have created a testfile for the problem, i am using FormFu inside
the catalyst-framework, Catalyst::Controller::HTML::FormFu is Version
0.03004, Catalyst is version 5.7014. so firstly here is the controller:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
package MyApp::Controller::test;
use strict;
use warnings;
use base qw(Catalyst::Controller::HTML::FormFu);
sub index : Local FormConfig('test/index2.conf'){
my ( $self, $c ) = @_;
my $form = $c->stash->{form};
if ($form->submitted_and_valid){
$c->stash->{message} = "Form sumitted and valid!";
}
$c->stash->{template} = 'test/index.tt2';
}
1;
---------------------------------------------------------------------------------------------------------------------------------------------------------------
the Formfu conf file:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
indicator submit
<element>
type Radio
name additional_infos
value 1
label yes
</element>
<element>
type Radio
name additional_infos
value 0
label no
checked checked
</element>
<element>
type Text
name additional
<constraint>
type Required
<when>
field additional_infos
values 1
</when>
</constraint>
</element>
<element>
type Submit
name submit
value submit
</element>
---------------------------------------------------------------------------------------------------------------------------------------------------------------
the template:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
[%- META title = "test" -%]
[% form %]
---------------------------------------------------------------------------------------------------------------------------------------------------------------
the catalyst-debug form-dump:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
form => bless({
_elements => [
bless({
_constraints => [],
_deflators => [],
_errors => [],
_filters => [],
_inflators => [],
_plugins => [],
_transformers => [],
_validators => [],
attributes => {},
comment_attributes => {},
container_attributes => {},
container_tag => "div",
field_filename => "input_tag",
field_type => "radio",
filename => "input",
is_field => 1,
label => "yes",
label_attributes => {},
label_filename => "label",
label_tag => "label",
name => "additional_infos",
parent => 'fix',
reverse_multi => 1,
stash => {},
type => "Radio",
value => 1,
}, "HTML::FormFu::Element::Radio"),
bless({
_constraints => [],
_deflators => [],
_errors => [],
_filters => [],
_inflators => [],
_plugins => [],
_transformers => [],
_validators => [],
attributes => { checked => "checked" },
comment_attributes => {},
container_attributes => {},
container_tag => "div",
field_filename => "input_tag",
field_type => "radio",
filename => "input",
is_field => 1,
label => "no",
label_attributes => {},
label_filename => "label",
label_tag => "label",
name => "additional_infos",
parent => 'fix',
reverse_multi => 1,
stash => {},
type => "Radio",
value => 0,
}, "HTML::FormFu::Element::Radio"),
bless({
_constraints => [
bless({
"not" => 0,
parent => 'fix',
type => "Required",
when => { field => "additional_infos", "values" => 1 },
}, "HTML::FormFu::Constraint::Required"),
],
_deflators => [],
_errors => [],
_filters => [],
_inflators => [],
_plugins => [],
_transformers => [],
_validators => [],
attributes => {},
comment_attributes => {},
container_attributes => {},
container_tag => "div",
field_filename => "input_tag",
field_type => "text",
filename => "input",
is_field => 1,
label_attributes => {},
label_filename => "label",
label_tag => "label",
name => "additional",
parent => 'fix',
stash => {},
type => "Text",
}, "HTML::FormFu::Element::Text"),
bless({
_constraints => [],
_deflators => [],
_errors => [],
_filters => [],
_inflators => [],
_plugins => [],
_transformers => [],
_validators => [],
attributes => {},
comment_attributes => {},
container_attributes => {},
container_tag => "div",
field_filename => "input_tag",
field_type => "submit",
filename => "input",
is_field => 1,
label_attributes => {},
label_filename => "label",
label_tag => "label",
name => "submit",
parent => 'fix',
retain_default => 1,
stash => {},
type => "Submit",
value => "submit",
}, "HTML::FormFu::Element::Submit"),
],
_models => [],
_output_processors => [],
_plugins => [],
_processed_params => {},
_valid_names => [],
attributes => { action => "", method => "post" },
auto_error_class => "error_%s_%t",
auto_error_message => "form_%s_%t",
config_callback => { plain_value => sub { "???" } },
default_args => { constraints => {}, elements => {} },
default_model => "DBIC",
filename => "form",
indicator => "submit",
input => {},
languages => ["en"],
localize_class => "HTML::FormFu::I18N",
query => 'fix',
query_type => "Catalyst",
render_method => "string",
stash => { context => 'fix' },
submitted => "",
tt_args => 'fix',
tt_module => "Template",
}, "HTML::FormFu"),
template => "test/index.tt2",
};
$a->{"__InstancePerContext_159122152"}{c}{stash} = $a;
$a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0]{_children}[0]{_parent} = $a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0];
$a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0]{_children}[1]{_parent} = $a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0];
$a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0]{_children}[2]{_parent} = $a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0];
$a->{"__InstancePerContext_159122152"}{c}{stats}{tree} = $a->{"__InstancePerContext_159122152"}{c}{stats}{stack}[0];
$a->{form}{_elements}[0]{parent} = $a->{form};
$a->{form}{_elements}[1]{parent} = $a->{form};
$a->{form}{_elements}[2]{_constraints}[0]{parent} = $a->{form}{_elements}[2];
$a->{form}{_elements}[2]{parent} = $a->{form};
$a->{form}{_elements}[3]{parent} = $a->{form};
$a->{form}{query} = $a->{"__InstancePerContext_159122152"}{c}{request};
$a->{form}{stash}{context} = $a->{"__InstancePerContext_159122152"}{c};
$a->{form}{tt_args} = $a->{"__InstancePerContext_159122152"}{_html_formfu_config}{constructor}{tt_args};
$a;
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------
the error:
indifferent i am chossing the radio button for "yes" or "no" the
"when()" condition seems to be ignored, the method
"submitted_and_valid()" never returns true for the form in this case, if
i am using the Required-constraint without the when() condition all
works fine.
Greets :)
More information about the HTML-FormFu
mailing list