2013-02-09 54 views
0

我正在通過鋰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函數中,我想我可以使這個工作。

在此先感謝您的幫助

回答

2

看看裏面有什麼$options。你應該在那裏有一個'值'鍵,它具有表單中的所有值。

所以儘量 $_data = $options['values'];

+0

謝謝marscher!這工作。數據字符串中的子文檔有一個小問題。例如,在我的主文檔中,我有一個子文檔(我正在使用MongoDB)。該子文件被稱爲「答案」。所以我認爲我可以通過像'$ options ['values'] ['answers']這樣的東西來拉出數值;'但是,結果實際上回來了,就像'「answers.0.answer_type」' - 這不是我預計,但我想出了一個方法來處理它。再次感謝你的幫助 – NinoCodes 2013-02-10 00:07:48