Cakephp 2.x和DatePicker - 日期格式将错误恢复为mysql格式

时间:2013-12-03 11:35:35

标签: jquery date cakephp twitter-bootstrap datepicker

人们,重新审视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>

我有两个问题:

  1. 提交表单后,如果出现验证错误,页面刷新(显示错误),输入字段中的日期格式将恢复为yyyy-mm-dd h:i:s格式(我正在添加date用于其他目的的datetime字段,但即使我更新mysql中字段的日期格式,日期格式仍然会在出错时恢复为yyyy-mm-dd。然后,用户必须从日期选择器中重新选择日期,以避免遇到(其他)错误。

  2. 当我在/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'
        )
    ),
    
  3. 当我删除日期格式验证时,表单发布正常,并且(正确)日期时间被提交到数据库。

    我还尝试在控制器中添加以下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的示例。

1 个答案:

答案 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']));
}

我在编辑功能上也使用了相同的片段(成功),因此当用户去编辑记录时,日期会以正确的格式在输入字段中呈现。