故事:表单获取两个模型(Project和相关的ProjectDetail)的输入,控制器尝试使用saveAll保存表单数据。对于相关模型的某些字段,验证失败,即使它不应该(例如1234未通过规则'数字')。经过一些搞砸后我把调试($ this->数据);在每个模型的beforeValidate()调用中调用,注意'cost'和'revenue'字段如何以某种方式丢失其前导数字(而日期字段则不会。此字段也正确验证)。
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蛋糕1.3.10& 1.3.11
答案 0 :(得分:0)
请记住beforeValidate中的return true;
。
我不清楚你遇到的主要数字问题。但是对于数值:你无法访问beforeValidate中的$this->data['ProjectDetail']['cost']
,因为$ this将引用模型,而不是控制器。我不确定为什么它不会给你一个错误。