我正在通過鋰PHP框架構建一個非常複雜和動態的表單。鋰電PHP框架高級驗證
我已經得到了表格工作,並保存到MongoDB與小問題。但我在驗證時遇到問題。
簡單驗證(如檢查字段是否爲空或數字)工作正常。但是我必須做一些複雜的驗證,這些驗證依賴於表單中的許多字段。
例如,我有一個表單,用戶可以輸入一個問題,然後爲此問題輸入無限數量的可能答案。列出了每個答案的字段ID,例如「answer_1」,「answer_2」,「answer_3」等。用戶可以添加無限數量的答案。這發生在一些花哨的JavaScript中,它在客戶端插入額外的元素到表單中。
在驗證級別,我想確保添加的每個答案都不爲空。
我想用Lithium中構建的「傳統」驗證器功能來做到這一點。我也這樣做在模型級別,而不是控制水平(注 - 我有一個解決辦法來解決這個控制器上的水平,但寧願做「正確」的方式在模型)
的問題,據我所知,是你只能傳遞一個值到驗證器規則。我只需要將表單中的所有值傳回給驗證器。如果我能做到這一點,我會成爲金牌。我想要做的僞代碼如下所示:
Validator::add('CorrectTest', function(&$value, $format = null, array $options = array()) {
foreach ($_data as $key => $value) {
if (stristr($key, "answer_")) {
if ($value == "") {
return false;
}
}
}
return true;
});
此代碼不起作用,因爲$ _data值不存在。如果我可以找出一種方法來將完全填充的「$ _data」對象添加到Validator函數中,我想我可以使這個工作。
在此先感謝您的幫助
謝謝marscher!這工作。數據字符串中的子文檔有一個小問題。例如,在我的主文檔中,我有一個子文檔(我正在使用MongoDB)。該子文件被稱爲「答案」。所以我認爲我可以通過像'$ options ['values'] ['answers']這樣的東西來拉出數值;'但是,結果實際上回來了,就像'「answers.0.answer_type」' - 這不是我預計,但我想出了一個方法來處理它。再次感謝你的幫助 – NinoCodes 2013-02-10 00:07:48