在FastAdmin中,控制器可以通过渲染模板时,为SelectPage控件的data-source参数提供动态的JSON数据源,从而实现动态下拉菜单选项的传递和渲染。通常,需要执行以下步骤:
1.在控制器中定义一个变量,用于存储SelectPage控件需要显示的下拉菜单选项数据。
// application/admin/controller/Test.php
namespace app\admin\controller;
use app\admin\model\Test as TestModel;
use think\Db;
class Test extends Base
{
// 动态数据源
public function dynamicSelect()
{
$options = Db::name('zz_category')->field(['id', 'name'])->order('id')->select();
$jsonOptions = json_encode($options);
$this->assign('jsonOptions', $jsonOptions);
return $this->view->fetch();
}
}
在上述代码中,查询zz_category表中的分类数据,并将结果赋值给 o p t i o n s 变量,然后通过 j s o n e n c o d e 函数将其转换成 J S O N 格式,存储到 options变量,然后通过json_encode函数将其转换成JSON格式,存储到 options变量,然后通过jsonencode函数将其转换成JSON格式,存储到jsonOptions变量中,用于后续的参数传递。
2.在前端页面中,传递控制器中的JSON格式数据源到SelectPage控件的data-source参数中。
<!-- application/admin/view/test/dynamic_select.html -->
{% extends "layout/default.html" %}
{% block content %}
<form class="search-form clearfix">
<input type="text" name="keyword" value="" placeholder="请输入关键词">
<span class="input-group-btn">
<button class="btn btn-default" type="submit">搜索</button>
</span>
</form>
<form class="form-horizontal">
<div class="form-group">
<label class="col-xs-2 control-label">下拉框</label>
<div class="col-xs-5">
<input type="text" name="category_name" value="" placeholder="请选择分类" class="form-control selectpage" data-source="{{ jsonOptions }}">
</div>
</div>
</form>
{% endblock %}
{% block script %}
<script>
$(function () {
$('.selectpage').selectPage({
showField: 'name',
keyField: 'id',
url: '',
data: {},
pageSize: 10,
orderBy: '',
orderDir: '',
ajaxOptions: {}
});
});
</script>
{% endblock %}
在上述代码中,通过data-source参数传递控制器中生成的JSON格式数据源到SelectPage控件中。控制器中定义的jsonOptions变量通过模板引擎传递到前端页面中,然后在SelectPage控件的data-source参数中引用。
通过以上步骤,就可以在FastAdmin中控制器给动态下拉(SelectPage)的data-source参数传值了。