在CakePHP中处理复杂数据类型的最佳方法是什么?
我的目标:替换默认蛋糕Datepicker
我讨厌默认的CakePHP FormHelper日期选择器选择元素,而我想使用jQuery UI Datepicker小部件.为了优雅地降级,我希望有一个日期字段(使用小部件启用)和时间选择器选择框约束为15分钟增量. 如果我解释得很差,这就是它的样子: 我的理想解决方案 为了尽量减少重复,我想将HTML放在布局元素中并使用Behavior函数处理它.这样我可以做类似以下的事情: view.ctp echo $this->element( 'datepicker',array( 'data' => $data ) ); model.php $actsAs = array( 'Datepicker' ); function beforeSave( $options ){ $this->parseDatepickers(); //behavior function would alter $this->data return true; } 问题 不幸的是,当它到达beforeSave(或beforeValidate)回调时,datepicker& timepicker字段已被模型的解构函数破坏.解构主义似乎正在寻找约会和时间以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 ); 所以…………… 做这个的最好方式是什么?将它放在beforeSave或beforeValidate中似乎是“蛋糕方式”,但解构主义会杀死我.我是否需要扩展AppModel并覆盖解构?这看起来也很难看.
我通常将我的日期字段作为视图中的文本字段来覆盖默认的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) 这与数据库中的正确日期时间数据类型一起使用,听起来就像您尝试做的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |