Yii2使用活动表单保存选中的checkboxList项目并搜索模型

时间:2015-11-12 12:38:47

标签: yii2 checkboxlist

我想在我的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中,但仍然不知道最好将它们保存到搜索后再次显示。

2 个答案:

答案 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>