【问题标题】:Cakephp 2.x and DatePicker - date format reverts on error to mysql formatCakephp 2.x 和 DatePicker - 日期格式在错误时恢复为 mysql 格式
【发布时间】:2013-12-03 11:35:35
【问题描述】:

伙计们,重新散列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格式(我正在添加一个日期到用于其他目的的日期时间字段,但即使我在 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'
        )
    ),
    

当我删除日期格式验证时,表单发布正常,并且(正确的)日期时间被提交到数据库。

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

【问题讨论】:

    标签: jquery date cakephp twitter-bootstrap datepicker


    【解决方案1】:

    我想我已经找到了解决方案,或者它可能是一个 hack - 渴望得到确认或建议..

    在ModelController.php的add函数的底部,我添加了如下代码来检查日期字段的请求数据是否存在(页面出错时,请求数据中正在返回post数据),如果它确实以我正在使用的格式对其进行格式化。它正在完成这项工作,但我想弄清楚如何使它更通用,因为我在整个项目中都有一些日期字段。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2013-12-16
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多