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 相关文章推荐
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php循环输出数据库内容的代码
May 24 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
微信支付开发维权通知实例
2016/07/12 PHP
js中的string.format函数代码
2020/08/11 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
python读写文件write和flush的实现方式
2020/02/21 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
virtualenv介绍及简明教程
2020/06/23 Python
python math模块的基本使用教程
2021/01/16 Python
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
事假请假条范文
2014/04/11 职场文书
实习生评语
2014/04/26 职场文书
最常使用的求职信
2014/05/25 职场文书
介绍信的写法
2015/01/31 职场文书
爱国主义电影观后感
2015/06/18 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
vue使用element-ui按需引入
2022/05/20 Vue.js