我在CakePHP中遇到了一个奇怪的问题。我有一系列问题,从复选框开始。如果选中该复选框,我想要另外两个输入字段。否则,如果未选中,则它们是可选的。我写了一个自定义函数来验证输入字段。这是其中之一:
public function rn_number () {
if ($this->data['Education']['rn_box'] == 1) {
if($this->data['Education']['rn_number'] == '')
return false
}
return true;
}
public $validate = array(
'rn_number' => array(
'rn_number'=>array(
'rule' => 'rn_number'
),
),
);
验证工作正常。对于上述规则,它检查id为'cna_box'的复选框是否具有值1,或者是否已选中,然后检查id为'cna_number'的输入是否为空。如果是,则返回false。如果选中该复选框,则始终要求提交数据。我的问题是它只是有时表示当'cna_number'等必需的输入字段为空时有错误。在第一次提交时,它将始终指示这些字段是必需的。但是,如果您再次提交表单,则不会指示这些字段是必需的,也不会显示错误消息 - 这会让用户感到困惑。
我注意到复选框有一个隐藏的输入。提交复选框并返回有错误的页面后,隐藏输入的值为0,复选框的值为1.您认为这与问题有关吗?
更新:
以下是我视图中的代码,用于生成相关的表单字段:
echo $this->Form->inputs(array(
'legend'=>'Certifications',
'rn_box'=>array(
'type'=>'checkbox',
'label'=>'RN',
),
'rn_number'=>array(
'label'=>'RN Number:',
'value' => $results['Education']['rn_number']
),
'rn_exp_date' => array(
'label' => 'Expiration Date:',
'dateFormat' => 'MDY',
'monthNames' => FALSE,
'minYear' => date('Y'),
'maxYear' => date('Y') + 20,
'empty' => TRUE,
'after' => '<span class="small">(MM/DD/YYYY)</span>',
'class' => 'input-mini',
'selected'=>strtotime($results['Education']['rn_exp_date'])
),
));
控制器代码:
public function pagethree() {
/**
** If user has completed this form,
** grab data for editing
**/
$this->set('results', $this->Education->find('first', array(
'conditions' => array('Education.user_id' => $this->Auth->user('id'))
)));
if ($this->request->is('post')){
$this->request->data['User']['id'] = $this->Auth->user('id');
/**
** Find if there is any data
** in this user in the Basics
** table.
**/
$existingRecordId = $this->Education->find('first', array(
'conditions' => array('Education.user_id' => $this->Auth->user('id')),
'fields' => array('Education.id')
));
/**
** If data exists, return row
** id (PK). Set this value to
** id key, so saveAll() updates
** existing row.
**/
if(sizeof($existingRecordId)>0)
$this->request->data['Education']['id'] = $existingRecordId['Education']['id'];
if ($this->User->saveAll($this->request->data)) {
$this->redirect(array('action'=>'pagefour'));
} else {
$this->Session->setFlash('Your data have not been saved');
}
}
}
答案 0 :(得分:0)
value
和selected
绝不是一个好主意。特别是如果您想在提交后保留表单并且如果它无效。
您应该使用default
或从控制器执行此操作:
http://www.dereuromark.de/2010/06/23/working-with-forms/
章节“默认值”