2011-07-27 55 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