在laravel-admin框架中已经定义的多级联动,可以在官网查看,这里就不赘述了。但是在使用中发现功能和我想要的有一些偏差,第一次进入默认的时候也不太好用,就自己改了一下,加了一个默认的方法。
以城市与区域的二次联动为例。当我选择沈阳的时候,地区列表变成了和平区、沈河区、铁西区等。当我选择大连、瓦房店、甘井子等。
首先,根据laravel-admin的文档,添加模型
public function _ _ construct(array $ attributes=[]){ parent : _ _ construct($ attributes);$ this-SetParentColumn(' PID ');$ this-SetorderColumn(' sort ');$ this-setTitleColumn(' name ');}然后在表单上添加城市和地区的选择控件
受保护的函数form(){ return admin :3360 form(区域模型:3360类,函数(form $ form) {$ form-text ('name ',' name ')-rules(' required ');$form-select('city_id ',' city ')-options(dealitymodel :3360 selectoptions nooot())-load(' PID ',' district')-loadone ('PID ',' district ');//load方法随框架一起提供,在文件vendor=encore=laravel-admin=src=form=field=select中定义。loadone是自己编写的,代码区定义的方法将在后面给出。pid是根据城市的变化而变化的下拉列表框的名称,也就是下面这个。$form-select('pid ',' region') -options(array(0='请选择region '));});}在from方法之后创建一个新的区域方法
公共功能区(Request $ Request){ $ city id=$ Request-get(' q ');$ list=area model : where([' city _ id '=$ city id,' pid'=0])-get(['id ',db : raw(' name as text ')]);foreach($ list as $ key=$ value){ $ arr[]=array(' id '=$ value-id,' text '=$ value-text);}返回$ arr//返回array to region选项}在文件vendor=encore=laravel-admin=src=form=field=select中的load方法之后创建一个名为loadone的新方法。代码如下:
公共函数loadOne($field,$sourceUrl,$idField='id ',$ TextField=' text '){ if(Str : contains($ field,' ')){ $ field=$ this-format name($ field);$class=str_replace(['[',']'],' _ ',$ field);} else { $ class=$ field} $ script=EOT $(function(){ var target=$(')。$ class ');$.get('$sourceUrl?q=' $(' { $ this-getElementClassSelector()} ')。val(),函数(数据){ target.find('option ')。移除();$(target).select2({ data: $)。map(数据,函数(d){ d . id=d . $ IDfield;d.text=d. $ textField返回d;}) });});});EOTadmin : script($ script);返回$ this}实际上相当于向load方法添加了一个默认的数据填充。
最后,别忘了在路线上添加区域方法,并在上面写下定义区域的路线
以上laravel-admin的多级联动方法是边肖分享的全部内容,希望能给大家一个参考和支持。