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下MAIL的另一解决方案
Oct 09 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php查看网页源代码的方法
Mar 13 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
PHP实现统计代码行数小工具
Sep 19 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
javascript 正则表达式相关应介绍
2012/11/27 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Python爬虫与反爬虫大战
2020/07/30 Python
python 利用toapi库自动生成api
2020/10/19 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
python wsgiref源码解析
2021/02/06 Python
小学教师自我鉴定
2013/11/07 职场文书
应届毕业生求职信
2014/05/26 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers
vue 自定义组件添加原生事件
2022/04/21 Vue.js