【问题标题】:HTML::FormHandler field validation based on other field's check'd stateHTML::FormHandler 字段验证基于其他字段的检查状态
【发布时间】:2016-01-02 15:13:27
【问题描述】:

我正在使用 HTML::FormHandler 为表单开发一个 Perl/Catalyst Web 应用程序。 如果选中复选框,我正在尝试对字段进行条件验证。

下面的代码来自我为我的表单创建的角色。

has_field 'autosys_jobs.schedule.has_run_day_of_month' => ( type=>'Boolean');
has_field 'autosys_jobs.schedule.run_day_of_month' => ( type => 'PosInteger');

#Validation function for 'autosys_jobs.schedule.run_day_of_month'
sub validate_autosys_jobs_schedule_run_day_of_month {
    my ( $self, $field ) = @_;
    if( $self->field('autosys_jobs.schedule.has_run_day_of_month')->value ) {
       #validate 'autosys_jobs.schedule.run_day_of_month'
    }
}

我遇到的问题是$self->field('autosys_jobs.schedule.has_run_day_of_month')->value 对于布尔字段,即使被选中也总是返回 0。

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 是否调用了验证函数?因为 field ( type => 'boolean' ) 完全符合您的要求,所以我目前使用它没有问题 - 即对我来说,checkbox checked => field->value 为真。我问是因为 HTML::Formhandler 将自动使用 field_$fieldname subs 进行验证,但它被称为“validate_autosys_jobs_schedule_run_day_of_month”,而您的字段是“autosys_jobs.schedule.has_run_day_of_month”(注意点)
  • 是的,正在调用验证函数。我也证实了这一点,文档指示用下划线重命名任何点。
  • 不知道。似乎是唯一可能出错的事情,但我很高兴看到它不是而且你自己已经弄清楚了。也许您下次应该提及所有相关信息;)

标签: perl catalyst html-formhandler


【解决方案1】:

在深入研究 HTML::FormHandler 文档后,我能够找出我的错误。 字段 autosys_jobs.schedule 是一个复合字段(忘了说)

has_field 'autosys_jobs.schedule' => ( type => 'Compound');

为了访问感兴趣的领域,我必须在我的验证子中使用以下内容:

$self->field('autosys_jobs.0.schedule.has_run_day_of_month')->value

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2018-01-12
    • 1970-01-01
    • 2017-11-13
    • 2017-09-08
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多