在我看来,我有一个数据输入,设置像这样:
echo $form->input('cc_expdate', array('label' => __('exp. date', true),
'type' => 'date', 'dateFormat' => 'MY', 'default' => date('Y'),
'minYear' => date('Y'), 'maxYear' => date('Y', strtotime("+10 years")),
'orderYear' => 'asc', 'separator' => ' ', 'monthNames' => false));
而且在我的模型我有一个验证规则,即:
'cc_expdate' => array(
'rule' => array('date', 'my'),
'message' => 'Please select a valid expiration date'
)
但验证总是失败。当我查看$this->data
时,发现日期正在通过表单作为数组传递(例如'cc_expdate' => array('month' => '10', 'year' => '2010')
),但看起来日期验证规则需要像10-2010
这样的字符串。我在Cake附近寻找并检查了文档,但没有发现任何内容。看起来这应该是一个简单的任务来处理,我是否错过了一些简单的事情,或者Cake没有内置'日期'表单元素的验证?
欢呼声,
-Bri
的'Model'类有一个['解构()'方法](HTTP://api13.cakephp .org/view_source/model /#line-849),他们的工作是将'Form'助手创建的日期数组重新组合为一个标量值。根据我的经验,这个“重建”(IMO,方法名称的语义是违反直觉的)在值传入进行验证之前发生。我没有看到您的代码段中有任何看起来不正确的内容。 – 2010-10-10 13:08:16
@Rob谢谢你指出。我会看一下'Model'类,看看我是否可以跟踪foobar发生的地方。现在我已经将代码添加到我的控制器中,将日期数组标量化为新的键('$ this-> data ['Model'] ['cc_expdate2']'),并向我的模型添加了自定义验证规则,验证价值。 (Cake的各个方面及其预期的数据格式阻止我仅在控制器或模型中执行此操作) – Soulriser 2010-10-10 17:46:19
几周前我提出了类似的问题。我很惊讶日期验证需要任何额外的代码来执行。也许他们会对这个蛋糕2.0进行微调。 – the0ther 2010-10-18 19:10:08