【发布时间】:2010-10-10 07:13:00
【问题描述】:
您好,
在我看来,我有一个日期输入,设置如下:
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 没有内置的“日期”表单元素验证?
干杯,
-布里
【问题讨论】:
-
Model类有一个deconstruct()method,其工作是将Form助手创建的日期数组重新组合成一个标量值。以我的经验,这种“重构”(IMO,方法名称的语义是违反直觉的)发生在在值被传入以进行验证之前。我在你的 sn-p 中没有看到任何看起来有问题的地方。 -
@Rob 感谢您指出这一点。我将查看
Model类,看看我是否可以追踪 foobar 发生的位置。现在我已经向我的控制器添加了代码,将日期数组标量化为一个新键 ($this->data['Model']['cc_expdate2']),并向我的模型添加了一个自定义验证规则来验证该值。 (Cake 的各个方面及其预期的数据格式使我无法仅在控制器或模型中执行此操作) -
几周前我提出了一个类似的问题。我很惊讶日期验证需要执行任何额外的代码。也许他们会针对 cake 2.0 进行微调。
标签: validation cakephp