当在fastadmin中使用select picker多选保存数
2024-01-21 本文已影响0人
知码客
目标:实现一个下拉的多选框,例如下图

先说一下实现方法
首先为了我们更方便管理可以在后端先制定好对应的文字方便我们前台调用。
在模型里面定义一个方法如下
public function getMemberlevel()
{
return ['0'=>__('注册会员'),'1' => __('一日制会员'), '2' => __('季月制会员'), '3' => __('一年制会员')];
}
然后再控制器中赋值给变量方便前台调用如下
public function _initialize()
{
parent::_initialize();
$this->view->assign("memberlevelList", $this->model->getMemberlevel());
}
前端就可以循环出来对应的东西了,代码如下
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Memberlevel')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-memberlevel" class="form-control selectpicker" multiple="" name="row[memberlevel][]">
{foreach name="memberlevelList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
当然上面的语言变量需要您自行再lang文件中定义
那么就是先上述图片的样子了,但是后台保存数据的时候是无法保存到数据库的,因为接受的是数组所以我们还需要使用改造器把数据改造一下如下
在模型中定义
protected function setMemberlevelAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
这样就可以了,可以多写写。多实践,多做记录,这都是经验