2011-10-31 23 views
0

我有以下問題:
我需要驗證控制器中的數據,該數據由窗體傳遞。特別之處:表單中的字段不在數據庫中,但在$ validate-Array中。 - 哪一個應該不成問題。
另一件事是,該模型與這種形式的部分有hasMany-關係。cakePHP:驗證控制器中的數據(hasMany)

Text hasMany Proofs 

這是驗證陣列:

var $validate = array( 
    'freetext' => array( 
     'between' => array( 
      'rule' => array('between', 250, 1000), 
      'message' => '..', 
    ), 
    ), 
); 

這裏是傳遞給控制器​​的數據的一個例子

[Proof] => Array 
    (
     [0] => Array 
      (
       [freetext] => asd 
      ) 
     [1] => Array 
      (
       [freetext] => asd 
      ) 
     [2] => Array 
      (
       [freetext] => asd 
      ) 
    ) 

我使用以下代碼來驗證:

$this->Texts->set($this->data); 
if ($this->Texts->validates()) { 

當我打電話給它時,它重新變成真,所以驗證成功。但是freetext有少於250個字符。

但:表單表示紅色星號,象徵我,驗證陣列被成功地解析了一個施加到形式。
而且在相應的控制器beforeValidate() { debug($this->data); }顯示正確的數據。

那麼,爲什麼數據驗證成功,即使政策是不是我?提前

謝謝!
〜MxAgent

+2

我相信你的模型調用應該是單數,而不是複數 - 「文本」,而不是「文本」。另外,不是'beforeValidate()'模型方法,而不是控制器操作? – Dave

+0

這是因爲我改變了一些名稱,由於明智的數據.. – Micronax

+0

這是一個問題,該字段不存在於表中,但在驗證數組和表單中。我需要處理的數據,用戶輸入的,然後部分地寫入到另一個字段.. – Micronax

回答

0

已更新至cakePHP 2.0並使用validateMany()進行驗證。現在它的工作;)

0

快速跳入CookBook(http://book.cakephp.org/view/1154/between)顯示您的格式似乎不正確。試試這個(放下「之間」陣列):

var $validate = array( 
    'freetext' => array( 
      'rule' => array('between', 250, 1000), 
      'message' => '..', 
    ) 
); 
+1

另一個「快速跳入CookBook」顯示了一個像他正在使用的示例:http://book.cakephp.org/view/133/Multiple-Rules-每場 – Dave

+0

啊,你說得對,我的壞! 但是看看那部分,我認爲他不應該在「之間」調用規則,因爲這可能會導致衝突。 –

+0

同意在'之間'命名可能會令人困惑,但我不認爲這是一個問題。 – Dave