我有一个编辑表单,从相应的模型中填充。它有一个文本字段,其日期值与之关联。我正在使用一个JavaScript插件,允许用户从弹出窗口中选择一个日期,它在July 15, 2015
字段中很好地显示它,但插件实际上提交了一个隐藏字段,其格式为我的数据库所期望的。
当我进入编辑页面时,该字段预先填充了丑陋的日期格式值,并且插件在初始化时不会更新日期的格式,仅当用户选择了日期。在cakephp中是否有一种方法我可以在它显示到页面之前预先格式化该值?即使我通过JavaScript插件运行它来处理那个很棒的格式。
我的表单字段
echo $this->Form->input('date', array(
'type' => 'text',
'class' => 'pickadate',
'placeholder' => 'Pick Date',
'required' => true
));
我使用的插件是http://amsul.ca/pickadate.js/date/
$('.pickadate').pickadate
format: 'mmmm dd, yyyy'
formatSubmit: 'yyyy-mm-dd'
hiddenName: true
container: 'main'
更新
在指向使用控制器格式化值之前,这里传递给视图是我的控制器代码,因为我不知道该怎么做
public function edit($id = NULL) {
if (!$this->Meeting->exists($id)) {
throw new NotFoundException('Invalid meeting');
}
if ($this->request->is(array('post', 'put'))) {
if ($this->Meeting->save($this->request->data)) {
$this->Session->setFlash('The meeting has been saved.','default',array('class'=>'success'),'flash');
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('The meeting could not be saved. Please, try again.','default',array('class'=>'error'),'flash');
}
} else {
$this->request->data = $this->Meeting->find('first', array(
'conditions' => array(
'Meeting.id' => $id,
),
));
}
$this->Meeting->set('date', CakeTime::format($this->Meeting->date, '%B %d, %Y'));
$meetingRooms = $this->Meeting->MeetingRoom->find('list');
$users = $this->Meeting->User->find('list');
$events = $this->Meeting->Event->find('list');
$this->set(compact('meetingRooms', 'users', 'events'));
}
答案 0 :(得分:0)
我发现我正在设置$this->request->data
中正在发送到视图的数据,所以我将更新日期的代码更改为
$this->request->data['Meeting']['date'] = CakeTime::format($this->request->data['Meeting']['date'], '%B %d, %Y');
答案 1 :(得分:0)
你可以在模型中加载一个虚拟字段来创建你想要的格式,所以结果是通过sql计算的,而不是在查找之后......
从模型中:
$this->virtualFields['date'] = 'DATE_FORMAT(date,"%d/%m/%Y")';
来自Controller:
$this->Meeting->virtualFields['date'] = 'DATE_FORMAT(date,"%d/%m/%Y")';