我有一个模型GenForm
与另一个模型有 HABTM 关系PdfFile
。GenForm
我用它在我的索引视图中生成一个复选框列表。在GenForm
模型中,我添加了:
public $hasAndBelongsToMany = array(
'PdfFile' => array(
'className' => 'PdfFile',
'joinTable' => 'gen_forms_x_pdf_files'
)
这是我认为的一个片段GenForm
index.ctp
:
<?php
echo $this->Form->input( 'PdfFile', array('label' => 'Select some PDF files', 'multiple' => 'checkbox') );
echo $this->Form->input( 'first_name' );
echo $this->Form->input( 'last_name' );
?>
在控制器中,我有一个基本的保存:
if ($this->request->is('post')) { // form was submitted
$this->GenForm->create();
if ($this->GenForm->save($this->request->data)) {
return $this->redirect(array('action' => 'generate', $this->GenForm->id)); // assemble the PDF for this record
} else {
$this->Session->setFlash(__('Log entry not saved.'));
}
}
现在$this->data
看起来像这样debug()
:
array(
'PdfFile' => array(
'PdfFile' => array(
(int) 0 => '1',
(int) 1 => '5'
)
),
'GenForm' => array(
'first_name' => 'xxx',
'last_name' => 'xxx',
'association_id' => '1',
'email' => ''
)
)
一切正常,但我无法验证复选框(至少必须选中一个)。所以,根据这个答案,我做了一些改变。
index.ctp
观点变成了:
<?php
echo $this->Form->input( 'GenForm.PdfFile', array('label' => 'Select some PDF files', 'multiple' => 'checkbox') );
echo $this->Form->input( 'first_name' );
echo $this->Form->input( 'last_name' );
?>
这是我的验证规则:
public $validate = array(
'PdfFile' => array(
'rule' => array(
'multiple', array('min' => 1)
),
'message' => 'Please select one or more PDFs'
)
)
这是现在的$this->data
样子:
array(
'GenForm' => array(
'PdfFile' => array(
(int) 0 => '1',
(int) 1 => '5'
),
'first_name' => 'xxx',
'last_name' => 'xxx',
'association_id' => '1',
'email' => ''
)
)
现在验证的复选框PdfFile
,但PdfFile
数据没有保存 - 尽管其他字段GenForm
正确保存到他们自己的表中。
谁能告诉我我缺少什么以便PdfFile
自动保存并得到验证?