laravel-admin的多级联动方法


Posted in PHP onSeptember 30, 2019

laravel-admin的框架已经定义好的多级联动可以去官网查看,这里就不再进行赘述,但是使用中发现功能与想要的东西有些偏差,刚进来默认的时候不好用,就自己改了改,增加了一个默认的方法。

以城市和地区的二级联动为例,当我选择沈阳时,地区列表变成和平区、沈河区、铁西区等等,当我选择大连时显示瓦房店、甘井子等等

laravel-admin的多级联动方法

首先,按照laravel-admin的文档,在Model中添加

public function __construct(array $attributes = [])
 {
  parent::__construct($attributes);

  $this->setParentColumn('pid');
  $this->setOrderColumn('sort');
  $this->setTitleColumn('name');
 }

然后在form上添加城市和地区的select控件

protected function form()
 {
  return Admin::form(AreaModel::class, function (Form $form) {

   $form->text('name', '名称')->rules("required");
   $form->select('city_id','城市')->options(

    DealCityModel::selectOptionsNoRoot()

   )->load('pid', 'district')->loadOne('pid', 'district');//load方法是框架自带的,定义在vendor=>encore=>laravel-admin=>src=>Form=>Field=>Select文件中,loadone是自己写的,在后面会给出代码district为自己定义的方法,pid是根据城市的变化而变化的下拉列表框名称,也就是下面这个。

   $form->select('pid','地区')->options(array(0 =>'请选择地区'));

  });
 }

在from方法后面新建一个district方法

public function district(Request $request)
 {
  $cityId = $request->get('q');

  $list = AreaModel::where(['city_id' => $cityId, 'pid' => 0])->get(['id', DB::raw('name as text')]);

  foreach ($list as $key => $value) {

   $arr[] = array("id" => $value->id, "text" => $value->text);

  }

  return $arr;//返回数组到地区的option

 }

在vendor=>encore=>laravel-admin=>src=>Form=>Field=>Select文件里load方法后新建一个方法命名为loadone,代码如下:

public function loadOne($field, $sourceUrl, $idField = 'id', $textField = 'text')
 {
  if (Str::contains($field, '.')) {
   $field = $this->formatName($field);
   $class = str_replace(['[', ']'], '_', $field);
  } else {
   $class = $field;
  }

  $script = <<<EOT
$(function(){
 var target = $(".$class");
 $.get("$sourceUrl?q="+$("{$this->getElementClassSelector()}").val(), function (data) {
  target.find("option").remove();
  $(target).select2({
   data: $.map(data, function (d) {
    d.id = d.$idField;
    d.text = d.$textField;
    return d;
   })
  });
 });
});
EOT;

  Admin::script($script);

  return $this;
 }

其实就是相当于给load方法增加了一个默认时的数据填充。

最后,千万别忘记在路由上加上district方法哈,要把定义district的路由写在上面→

laravel-admin的多级联动方法

以上这篇laravel-admin的多级联动方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP+DBM的同学录程序(2)
Oct 09 PHP
php 动态添加记录
Mar 10 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
php注销代码(session注销)
May 31 PHP
解析smarty模板中类似for的功能实现
Jun 18 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
php + nginx项目中的权限详解
May 23 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
php更新cookie内容的详细方法
Sep 30 #PHP
使用laravel的migrate创建数据表的方法
Sep 30 #PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 #PHP
php解决约瑟夫环算法实例分析
Sep 30 #PHP
php使用curl伪造浏览器访问操作示例
Sep 30 #PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 #PHP
Laravel框架控制器的request与response用法示例
Sep 30 #PHP
You might like
php 清除网页病毒的方法
2008/12/05 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
javascript回调函数详解
2018/02/06 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python3实现名片管理系统
2020/11/29 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
python字符串的index和find的区别详解
2020/06/20 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
同学会邀请书大全
2014/01/12 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
小学清明节活动总结
2014/07/04 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python