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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
写一个用户在线显示的程序
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 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 number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
JavaScript中Function详解
2015/02/27 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
Python完全新手教程
2007/02/08 Python
python实现2048小游戏
2015/03/30 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python生成词云的实现代码
2020/01/14 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
英国著名书店:Foyles
2018/12/01 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js