我想在我的Seachmodel中实现一个checkBoxList,但没有找到一个好的解决方案。我怎样才能做到这一点?在我的模型中,我有一个值的数组:
型号:
const ART_BLACK = 10;
const ART_GREEN = 20;
const ART_ORANGE = 30;
public static function colorText() {
return [
self::ART_BLACK => 'Black',
self::ART_GREEN => 'Green',
self::ART_ORANGE => 'Orange',
];
}
Serach view(_search)
<?= $form->field($model, 'color[]')->checkboxList(Color::colorText()); ?>
执行搜索后,不再选择所有元素。我也可以将数组中的值放在SearchModel中,但仍然不知道最好将它们保存到搜索后再次显示。
答案 0 :(得分:1)
创建一个值数组
$array = [10,20,30];
$searchModel->color = $array;
在_search.php
中<?= $form->field($model, 'color')->checkboxList(Color::colorText()); ?>
答案 1 :(得分:1)
我认为您只需要使用分隔的可用选项和所选选项
设置搜索模型class ColorSearchForm extends Model
{
const ART_BLACK = 10;
const ART_GREEN = 20;
const ART_ORANGE = 30;
public $available_colors = [
self::ART_BLACK => 'Black',
self::ART_GREEN => 'Green',
self::ART_ORANGE => 'Orange',
];
public $selected_colors = [];
/**
* @inheritdoc
*/
public function rules()
{
return [
['selected_colors', 'safe'],
];
}
}
在您的控制器中,您只需执行标准
public function actionSearch()
{
$model = new ColorSearchForm();
if ($model->load(Yii::$app->request->post())){
// echo '<pre>';print_r($model); exit(); //uncomment to debug
// do something to search
}
return $this->render('index', [
'model' => $model,
]);
}
显示视图中的复选框:
<div class="goods-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'selected_colors')->checkboxList($model->available_colors) ?>
<div class="form-group">
<?= Html::submitButton('Update', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>