人们,重新审视similar question ..
我正在使用Cakephp 2.4.2和eternicode's jquery Bootstrap-Datepicker。
在add.ctp
视图中,我有以下日期字段的代码:
echo $this->Form->input('Model.issue_date', array(
'format' => array('before', 'label', 'between', 'input', 'error', 'after'),
'fieldset' => false,
'label' => false,
'before' => '<label class="col-sm-2 control-label">Issue Date</label><div class="col-sm-10">',
'after' => '</div>',
'class' => 'form-control datepicker',
'type' => 'text',
'div' => 'form-group',
'error' => array(
'attributes' => array(
'wrap' => 'div', 'class' => 'alert alert-danger'
)
)
)
);
产生:
<div class="form-group required">
<label class="col-sm-2 control-label">Issue Date</label>
<div class="col-sm-10">
<input name="data[Model][issue_date]" dateFormat="dmy" class="form-control datepicker" type="text" id="ModelIssueDate" required="required"/>
</div>
</div>
在视图文件的底部,我添加了:
<script type="text/javascript">
<!--
//-->
$(document).ready(function() {
$('.datepicker').datepicker({
format: "dd-mm-yyyy",
todayBtn: "linked",
orientation: "bottom right",
autoclose: true,
todayHighlight: true
});
});
</script>
我有两个问题:
提交表单后,如果出现验证错误,页面刷新(显示错误),输入字段中的日期格式将恢复为yyyy-mm-dd h:i:s
格式(我正在添加date用于其他目的的datetime字段,但即使我更新mysql中字段的日期格式,日期格式仍然会在出错时恢复为yyyy-mm-dd
。然后,用户必须从日期选择器中重新选择日期,以避免遇到(其他)错误。
当我在/Model/Model.php文件中的字段中添加日期时间验证时,我收到格式验证错误。这是我用来验证格式的代码(在控制器和模型中用于测试dmy,ymd,ddmmyyyy,yyyymmdd格式之间的许多排列之一):
'issue_date'=> array(
'allowEmpty' => array(
'rule' => 'notEmpty',
'message' => 'Please enter a date and time'
),
'format' => array(
'rule' => array('datetime', 'dmy'),
'message' => 'Please enter a valid date'
)
),
当我删除日期格式验证时,表单发布正常,并且(正确)日期时间被提交到数据库。
我还尝试在控制器中添加以下strtotime而不解决问题:
if (isset($this->request->data['Model']['issue_date'])) {
$this->request->data['Model']['issue_date'] = date('d-m-Y', strtotime($this->request->data['Model']['issue_date']));
}
我也参与了使用DateBehavior provided in the bakery with no success - 它在视图中正确格式化日期,但问题1和2仍然存在。
任何建议,或者是否有人在cakephp 2.x中使用带有dd/mm/yyyy
格式日期字段的datepicker的示例。
答案 0 :(得分:0)
我想我找到了一个解决方案,或者它可能是一个黑客 - 热衷于获得确认或建议..
在ModelController.php的add函数的底部,我添加了以下代码来检查日期字段的请求数据是否存在(当页面错误,请求数据中返回的帖子数据时) ),如果它以我正在使用的格式进行格式化。它正在完成这项工作,但我想弄清楚如何让这更加通用,因为我在整个项目中都有一些日期字段。
//On load or refresh of the add view, check if request data is set for date fields, then format the output in to specific date format
if (isset($this->request->data['Model']['issue_date'])) {
$this->request->data['Model']['issue_date'] = date('d-m-Y', strtotime($this->request->data['Model']['issue_date']));
}
我在编辑功能上也使用了相同的片段(成功),因此当用户去编辑记录时,日期会以正确的格式在输入字段中呈现。