2011-07-27 49 views
0

故事攪亂數據:一個形式獲取輸入兩種模式(項目及相關ProjectDetail),控制器試圖保存表單數據與白水。驗證失敗的相關型號的某些領域,儘管它不應該(例如1234失敗規則「數字」)。經過一些搞砸後,我把調試($ this-> data);每個模型的beforeValidate()接來電,請注意如何在「成本」和「收入」字段每個不知何故失去了領先的數字(當日期字段沒有。這個字段也驗證正確)。CakePHP的白水在相關模型

Project -> beforeValidate() 

$this->data = Array 
(
    [Project] => Array 
     (
      [project_type_id] => 1 
      [name] => asdf 
      [cost_center] => 1234 
     ) 

    [ProjectDetail] => Array 
     (
      [cost] => 1234 
      [revenue] => 1234 
      [project_start] => 2011-07-27 
     ) 

) 

ProjectDetail -> beforeValidate() 

$this->data = Array 
(
    [ProjectDetail] => Array 
     (
      [cost] => 234 
      [revenue] => 234 
      [project_start] => 2011-07-27 
     ) 

) 

雖然這本身就是討厭,它似乎並沒有解釋爲什麼驗證失敗,因爲這兩個領域看起來仍然是數字。於是我就在beforeValidate方法過於以下幾點:

$cost = $this->data['ProjectDetail']['cost']; 
    debug('#'.$cost.'#'); //Check for obscure non-printables 
    debug(is_string($cost)); 
    debug(ctype_digit($cost)); 

和輸出:

Project -> beforeValidate() 
#1234# 
true 
true 


ProjectDetail -> beforeValidate() 
#234# 
true 
false 

所以,在某種程度上,這串憑藉其領先的數字一起失去了它的數字的煩躁。奇怪。任何想法讚賞。

編輯:是的,型號節省自己的就好了。

V.S. Php 5.3.6 Cake 1.3.10 & 1.3.11

+0

什麼是您的beforeValidate代碼? –

+0

只有幾個debug();上面提到的電話 – jmu

+0

我認爲這是一個錯誤,我剛剛發佈相同的!奇怪的是,我的字符串在它前面附有'1'。例如'測試'get保存爲'1test' –

回答

0

記得在return true; in beforeValidate。

我不清楚您在前面的數字問題。但是對於數字:您無法在beforeValidate中訪問$this->data['ProjectDetail']['cost'],因爲$ this將引用模型,而不是控制器。我不確定它爲什麼不會給你帶來錯誤。

+0

哦,這就是你的意思......是的,我回到'真實'。 – jmu