2015-10-05 105 views
1

我正在開發使用HTML :: FormHandler表單一個Perl /催化劑的web應用程序的HTML :: FormHandler現場驗證。 我想在一個字段上做一個條件驗證,如果複選框被選中。基於其他領域的check'd狀態

下面的代碼是從我創造了我的形式使用一個角色。

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。

關於我在做什麼錯的任何想法?

+1

是否被調用的驗證函數?因爲field(type =>'boolean')完全符合你的需求,所以我目前正在使用它,也就是說,checkbox check => field-> value是真的。 我問,因爲HTML :: Formhandler會自動使用field_ $字段名潛艇進行驗證,但它被稱爲「validate_autosys_jobs_schedule_run_day_of_month」,而你的領域是「autosys_jobs.schedule.has_run_day_of_month」(注意點) – bytepusher

+0

是在驗證功能被稱爲。我證實了這一點,文檔指出用下劃線重命名任何點。 –

+0

不知道。看起來像是唯一可能會出錯的東西,但我很高興看到它不是,而且你已經明白了。也許你下次應該提及所有相關信息;) – bytepusher

回答

0

挖掘更深的HTML :: FormHandler文檔後,我能夠找出我的錯誤。 場autosys_jobs.schedule是複合場(忘了提)

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

以訪問感興趣的領域,我不得不用我的驗證分以下:

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

謝謝全部