前几天第一次听说这个框架,也是机缘巧合下,我使用这个框架实现学生信息管理系统,确实在界面实现上很方便,因为它有强大的构建器,可以快速渲染出表格,表单等。框架的话,多看官方文档好一些,我这里也就是记录一下使用这个框架的情况,可能每个人不一样。
【1】我的开发环境
在win10下使用phpstudy2018,PHP5.6以上的版本,才可以支持DolphinPHP1.4(海豚PHP)的框架。其中
默认phpstudy2018安装后mysql的账号密码都是root。而DophinPHP是一个基于ThinkPHP5.1.34LTS开发的一套开源PHP快速开发框架。
【2】下载源码
http://www.dolphinphp.com/download/
进入官网下载就可以了
【3】安装一下
【4】前台/后台
前台:http://localhost/student/public/index.php
后台:http://localhost/student/public/admin.php/user/publics/signin.html
默认后台账号/密码admin / admin
可以进后台都点点看看,适应一下这个系统管理。
【5】创建模块
在application目录下创建自己的模块,我这里做的是学生信息管理界面,就以student命名,然后再student文件夹下创建一个info.php文件。大概就是下面的内容 。
打开后台-系统->扩展中心->模块管理,点击“安装”进入模块安装页面,安装一下。
【6】创建控制器
这个我弄的主要是后台管理,所以在student文件夹下创建一个admin用来放置后台控制器。
【7】构建器
DolphinPHP内置了强大的快速构建器,可以帮助开发者快速构建表单页面、数据表格和侧栏,方便快捷。
【8】后台创建节点
但是目前还不能直接点击进入,会显示""无任何节点权限"需要创建子节点。 直接可以生成一个界面。
【9】数据库
我是利用phpmyadmin在项目的数据库下直接创建学生表,和省市县的表。因为我要存储学生的地理位置。
DROP TABLE IF EXISTS `dp_student_info`;
CREATE TABLE `dp_student_info` (
`id` int(11) unsigned NOT NULL primary key auto_increment comment 'id',
`name` varchar(60) NOT NULL DEFAULT '' COMMENT '姓名',
`sex` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '性别:0-女,1-男,2-保密',
`age` tinyint(11) unsigned NOT NULL DEFAULT '0' COMMENT '年龄',
`birthday` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '生日',
`school` varchar(60) NOT NULL DEFAULT '' COMMENT '学校',
`province` varchar(36) NOT NULL DEFAULT '' COMMENT '省',
`city` varchar(36) NOT NULL DEFAULT '' COMMENT '市',
`county` varchar(36) NOT NULL DEFAULT '' COMMENT '县',
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='学生信息表';
DROP TABLE IF EXISTS `dp_address`;
CREATE TABLE `dp_address` (
`id` int(11) unsigned NOT NULL primary key auto_increment comment 'id',
`pid` int(11) DEFAULT NULL COMMENT '父级',
`name`varchar(255) DEFAULT NULL COMMENT '县',
`type` tinyint(2) DEFAULT NULL COMMENT '0国家/1省/2市/3县'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='中国省市县';
【10】添加学生信息
主要做这几点,实现方法,创建节点,使用表单构建器,实现三级联动,接收验证数据,提交保存,返回json信息。
其中三级联动这里我花费的时间比较多,实际上还是多看官方文档,去理解如何使用,明白参数的含义才是最重要的。
【11】学生信息列表
主要做这几点,实现方法,创建节点,使用表格构建器,设置按钮,设置表格数据,进行分页,按钮位置,搜索查询。
【12】编辑学生信息
主要做这几点,实现方法,根据学生id获取原本数据,使用表单构建器,三级联动默认数据,接收数据,进行保存,返回json信息。
【13】删除学生信息
主要做这几点,实现方法,根据学生id进行删除操作,返回json信息。
【14】设置用户角色
【15】授权用户
【16】结束
使用普通用户进行登陆。
【小结】
使用框架的话多看官方的文档,先学会模仿使用,理解其中的含义,再去实现自己想要的功能。实在不会的可以多bing一下,或者问一些群里的大佬,不过还是要首先明白自己的问题出现在哪里,不然你怎么问,怎么搜索都不会。
【附件:核心代码】
getMap();//获取搜索框的值
// 读取用户数据
$data_list = Db::name('student_info')->where($map)->paginate();
// 使用ZBuilder快速创建数据表格
return ZBuilder::make('table')
->setPageTitle('学生信息列表')
->addColumns([ // 批量添加列
['id', 'ID'],
['name', '姓名'],
['sex','性别 ',['0'=>'女','1'=>'男','2'=>'保密'] ],
['age', '年龄'],
['school', '学校'],
['province', '省'],
['city', '市'],
['county', '县'],
['create_time', '创建时间', 'datetime'],
['update_time', '修改时间', 'datetime'],
])
->addColumn('right_button', '操作', 'btn')
->addRightButton('edit',['href' => url('edit', ['id' => '__id__'])], ['skin' => 'layui-layer-lan'])
->addRightButton('delete',['href' => url('delete', ['id' => '__id__'])])
->addTopButton('add', [], ['skin' => 'layui-layer-lan'])
->setRowList($data_list)
->setColumnWidth([
'id' => 50,
'name' => 80,
'sex' => 50,
'age' => 50,
'age' => 50,
'school' => 100
])
->setSearchArea([
['text', 'name', '姓名', 'like'],
])
->fetch();
}
/**
* 添加学生信息
*/
public function add()
{
// 使用ZBuilder构建表单页面,并将页面标题设置为“添加”
$list_province = Db::name('address')->where('pid',1)->column('id,name');
return ZBuilder::make('form')
->setPageTitle('添加学生基本信息')
->addText('name', '姓名')
->addRadio('sex', '性别', '', ['0' => '女', '1' => '男', '2' => '保密'],'2')
->addDate('birthday', '生日', '', '', 'yyyy-mm-dd')
->addText('school', '学校')
->addLinkage('province', '省', '', $list_province, '', url('get_city'), 'city,county')
->addLinkage('city', '市', '', '', '', url('get_county'), 'county')
->addSelect('county', '县')
->setUrl(url('save'))
->fetch();
}
/**
* 保存 添加的信息
*/
public function save()
{
if(request()->isPost()){
$post = request()->post();
$data['name'] = $post['name'];
$data['sex'] = $post['sex'];
$data['school'] = $post['school'];
$data['birthday'] = strtotime($post['birthday']);
$data['age'] = date('Y',time())-date('Y',$data['birthday']);
$data['province'] = $this->get_where($post['province']);
$data['city'] = $this->get_where($post['city']);
$data['county'] = $this->get_where($post['county']);
$data['create_time']=time();
$data['update_time']=time();
$res = Db::name('student_info')->insert($data);
$arr['code'] = '1'; //判断状态
$arr['msg'] = '请求成功'; //回传信息
$arr['list'] = $res;
return $arr;
}
}
/**
* 编辑页面
*/
public function edit($id='')
{
if(empty($id)){
return ZBuilder::make('form')->assign('empty_tips', '请指定修改对象')->hideBtn(['submit', 'back'])->fetch();
}
$data = Db::name('student_info')->find($id);//获取编辑的数据
$list_province = Db::name('address')->where('pid',1)->column('id,name');//省份
//选出来省id
$pid = Db::name('address')->where('name', $data['province'])->find()['id'];
$list_city = Db::name('address')->where('pid',$pid)->column('id,name');
//选出来市id
$pid = Db::name('address')->where('name', $data['city'])->find()['id'];
$list_county = Db::name('address')->where('pid',$pid)->column('id,name');
//这里需要知道每个人的地点的id,才可以在编辑的时候显示出来
$data['province'] = Db::name('address')->where('name', $data['province'])->find()['id'];
$data['city'] = Db::name('address')->where('name', $data['city'])->find()['id'];;
$data['county'] = Db::name('address')->where('name', $data['county'])->find()['id'];;
return ZBuilder::make('form')
->setPageTitle('修改学生基本信息')
->addText('name', '姓名')
->addRadio('sex', '性别', '', ['0' => '女', '1' => '男', '2' => '保密'],'2')
->addDate('birthday', '生日', '', '', 'yyyy-mm-dd')
->addText('school', '学校')
->addLinkage('province', '省', '',$list_province, '', url('get_city'), 'city,county')
->addLinkage('city', '市', '', $list_city,'', url('get_county'), 'county')
->addSelect('county', '县','',$list_county)
->setFormData($data)
->setUrl(url('editSave', ['id' =>$id]))
->fetch();
}
/**
* 修改保存
*/
public function editSave(){
$post = request()->post();
$data['id'] = request()->param('id');
$data['name'] = $post['name'];
$data['sex'] = $post['sex'];
$data['school'] = $post['school'];
$data['birthday'] = strtotime($post['birthday']);
$data['age'] = date('Y',time())-date('Y',$data['birthday']);
$data['province'] = $this->get_where($post['province']);
$data['city'] = $this->get_where($post['city']);
$data['county'] = $this->get_where($post['county']);
$data['update_time']=time();
$res = Db::table('dp_student_info')->update($data);
$arr['code'] = '1'; //判断状态
$arr['msg'] = '请求成功'; //回传信息
$arr['list'] = $res;
return $arr;
}
/**
* 删除信息
* $id 某个学生id
*/
public function delete($id='')
{
$res = Db::name('student_info')->delete($id);
if($res){
$arr['code'] = '1'; //判断状态
$arr['msg'] = '请求成功'; //回传信息
$arr['list'] = $res;
}else{
$arr['code'] = '404'; //判断状态
$arr['msg'] = '请求失败'; //回传信息
$arr['list'] = $res;
}
return json($arr);
}
/**
* 获取地点
*/
public function get_where($id){
$data = Db::name('address')->find($id);
return $data['name'];
}
/**
* 获取市 二维数组
*/
public function get_city($province = '')
{
$data = Db::name('address')->where('pid',$province)->field(['id'=>'key','name'=>'value'])->select();
$arr['code'] = '1'; //判断状态
$arr['msg'] = '请求成功'; //回传信息
$arr['list'] = $data;
return json($arr);
}
/**
*获取县 二维数组
*/
public function get_county($city = '')
{
$data = Db::name('address')->where('pid',$city)->field(['id'=>'key','name'=>'value'])->select();
$arr['code'] = '1'; //判断状态
$arr['msg'] = '请求成功'; //回传信息
$arr['list'] = $data;
return json($arr);
}
}