故事攪亂數據:一個形式獲取輸入兩種模式(項目及相關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
什麼是您的beforeValidate代碼? –
只有幾個debug();上面提到的電話 – jmu
我認爲這是一個錯誤,我剛剛發佈相同的!奇怪的是,我的字符串在它前面附有'1'。例如'測試'get保存爲'1test' –