对我的问题了解很多,并没有弄清楚。我需要在checkboxList()
的数据库中写两个或更多值
在我看来activeForm
<?= $form->field($model, 'quant[]')->checkboxList([
'one' => 'one',
'two' => 'two',
'three' => 'three',
'four' => 'four'],
['separator' => '<br>']); ?>
因此,无论我选择多少值,创建后,只有一个将添加db。 我意识到我需要在控制器中获取一个数组,然后它将保存在数据库中。像这样:
public function actionCreate()
{
$model = new TakMol();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$model->quant=implode(',',$_POST['TakMol']['quant']); //change items into string to be saved
return $this->redirect(['index']);
} else {
$model->quant=explode(',',$model->quant); //string to array to fill the checkboxlist
return $this->render('create', [
'model' => $model,
]);
}
}
也许我需要在actionCreate
$post=Yii::$app->request->post();
$checkbox = array_keys ($post);
foreach ($checkbox as $value){
$model = new TakMol();
$model->quant = $model->id;
$model->quant = $value;
$model->save();
}
我尝试了其他选项,但没有成功。我将非常感谢帮助解决。
答案 0 :(得分:0)
如果您使用表单模型作为基本模型的额外字段的支持,则可以在此新类中处理此任务。
将TakMolForm.php文件放在TakMol.php的同一文件夹中:
class TakMolForm extends TakMol
{
private $_quantArray;
public function getQuantArray()
{
// Initialize it from 'quant' attribute
if($this->_quantArray == null)
{
$this->_quantArray = explode(',', $this->quant);
}
return $this->_quantArray;
}
public function setQuantArray($value)
{
$this->_quantArray = $value;
}
public function rules()
{
return array_merge(parent::rules(), [
[['quantArray'], 'safe'],
]);
}
}
然后在控制器中改变TakMolForm中的TakMol:
public function saveModel($model)
{
// Here is called getQuantArray() getter from TakMolForm model
$model->quant = implode(',', $model->quantArray);
return $model->save();
}
public function actionCreate()
{
$model = new TakMolForm();
if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) {
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function actionUpdate($id)
{
$model = TakMolForm::findOne($id);
if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) {
return $this->redirect(['index']);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
最后在视图中,您将使用quantArray字段而不是quant:
<?= $form->field($model, 'quantArray')->checkboxList([
'one' => 'one',
'two' => 'two',
'three' => 'three',
'four' => 'four'],
['separator' => '<br>']); ?>