gpt4 book ai didi

cakephp - 在 CakePHP 中处理复杂数据类型的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 08:50:17 26 4
gpt4 key购买 nike

我的目标:替换默认的 Cake Datepicker

我讨厌默认的 CakePHP FormHelper 日期选择器选择元素,我想改用 jQuery UI 日期选择器小部件。为了优雅地降级,我想要一个日期字段(通过小部件启用)和一个限制为 15 分钟增量的时间选择器选择框。

如果我解释得不好,下面是它的样子:

date-picker sample

我的理想解决方案

为了尽量减少重复,我想将 HTML 放在布局元素中并使用 Behavior 函数处理它。通过这种方式,我可以执行以下操作:

查看.ctp

echo $this->element( 'datepicker', array( 'data' => $data ) );

模型.php
$actsAs = array( 'Datepicker' );

function beforeSave( $options ){
$this->parseDatepickers(); //behavior function would alter $this->data
return true;
}

问题

不幸的是,当它到达 beforeSave 时(或 beforeValidate )回调,日期选择器和时间选择器字段已被模型的 deconstruct 销毁功能。 deconstruct似乎正在寻找要以 FormHelper 创建它们的方式报告的日期和时间。

简而言之,它正在寻找:
[date_field] => Array
(
[year] => 2011
[month] => 11
[day] => 11
[hour] => 8
[min] => 00
[meridian] => pm
)

但它发现:
[date_field] => Array
(
[datepicker] => 11/11/2011
[timepicker] => 8:00 pm
)

因为它没有找到它期望的结构,我最终得到了这个:
[date_field] =>

我知道我可以让 jQuery 使用适当命名的字段更新隐藏的输入,但这不会很好地降级。

当前的解决方法

目前,我正在做的是在保存之前通过我的行为函数清洗数据——但这并不是正确的做法:
$this->request->data = $this->Event->fixDates( $this->data );
$this->Event->save( $this->data );

所以...............

做这个的最好方式是什么?放入 beforeSavebeforeValidate看起来像“蛋糕方式”,但是 deconstruct杀了我。我是否需要扩展 AppModel 并覆盖 deconstruct ?这也太丑了吧

最佳答案

我通常将我的日期字段作为 View 中的文本字段来覆盖默认的 Form Helper 输出,然后使用 jQuery 日期选择器(或任何您的替代选择器)来设置日期:

echo $this->Form->input('date', array('type' => 'text', 'class' => 'datepicker'));

这将输出一个典型的标签而不是所有的下拉菜单。

然后,在我模型的 beforeSave 函数中,我将格式更改为 MySQL 格式的日期:
$this->data['Model']['date'] = date('Y-m-d G:i:s', strtotime($this->data['Model']['date']));

(记得在beforeSave中返回true)

这适用于数据库中正确的日期时间数据类型,听起来像您正在尝试执行的操作。

关于cakephp - 在 CakePHP 中处理复杂数据类型的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com