fastadmin采坑总结大全(持续更新)

目录

    • 一、fastadmin后台使用七牛云插件,上传图片旁的选择按钮无法上传图片以及保存图片
    • 二、使用fastadmin随机生成的入口文件报模板不存在
    • 三、实现前台菜单栏绿标选中
    • 四、给selectpage默认选中值
    • 五、给selectpage添加查询条件
    • 六、解决前台引入表格后出现破版问题
    • 七、去掉表格中默认的搜索样式
    • 八、控制器方法中传值到js
    • 九、在原有键值里对在增加
    • 十、使用 fastadmin的小程序支付
    • 十一、小程序登陆
    • 十二、自定义按钮并传值
    • 十三、在添加按钮上进行传值
    • 十四、fastadmin上传视频至七牛云
    • 十五、fastadmin后台能访问,前台路径错误 ,前台路径错误,后台又能访问。

一、fastadmin后台使用七牛云插件,上传图片旁的选择按钮无法上传图片以及保存图片

问题描述:

在这里插入图片描述
上传好的图片,无法显示在列表里:
在这里插入图片描述

解决方案:

此问题由于使用七牛云上传插件所导致,启用服务端回调,修改回调地址即可

在这里插入图片描述

二、使用fastadmin随机生成的入口文件报模板不存在

问题描述:

本地项目配置虚拟域名后访问后台没问题,放到线上后报入口文件的模板不存在。一开始以为Nginx配置错了,怎么调都无法调出
在这里插入图片描述

解决方案:

一、修改自动生成的文件:pCPyfJaEDR.php,修改为:admin.php
二、修改config.php
在这里插入图片描述
去掉admin即可!

三、实现前台菜单栏绿标选中

在这里插入图片描述

在这里插入图片描述
打开:sidenav.html
控制器名为my_baby_day,方法名为ceshi

<li class="list-group-item {:$config['controllername'].$config['actionname']=='my_baby_dayceshi'?'active':''}"><a href="{:url('my_baby_day/ceshi')}"><i class="fa fa-taxi">i>宝宝身高体重a>li>

四、给selectpage默认选中值

方案一:

效果展示:
在这里插入图片描述
在这里插入图片描述

<div class="form-group row"><label class="control-label col-xs-12 col-sm-2">{:__('添加体温')}:label><div class="col-xs-12 col-sm-8"><dl class="fieldlist" data-template="eventtpl1" data-name="row[temperature]"><dd><ins>{:__('度数')}ins><ins>{:__('时间段')}ins><ins>{:__('状态')}ins>dd>{foreach $teamp_info as $k=>$v}<dd class="form-inline"><ins><input type="text" data-rule="required" name="row[temperatures][{$k}][degree]" class="form-control" value="{$v.degree}" placeholder="度数"/>ins><ins><input type="text" data-rule="required" name="row[temperatures][{$k}][noon]" class="form-control selectpage" data-source="my_noon/index" data-field="noon" value="{$v.noon}" placeholder="时间段"/>ins><ins><input type="text" data-rule="required" name="row[temperatures][{$k}][status]" class="form-control selectpage" data-params='{"custom[fid]":1}' data-source="My_all_type/index" data-field="type_name" value="{$v.status}" placeholder="状态" size="10"/>ins><span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times">i>span><span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows">i>span>dd>{/foreach}<dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus">i> {:__('Append')}a>dd>dl>div>div>

方案二:
修改底层(不建议)
链接: fastadmin问答解决selectpage默认选中问题.

五、给selectpage添加查询条件

方案一:

<ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][status]" class="form-control selectpage" data-params='{"custom[fid]":1}' data-source="My_all_type/index" data-field="type_name" placeholder="状态" size="10"/>ins>

增加data-params='{"custom[fid]":1}'属性。
其中,找到selectpage方法:

在这里插入图片描述
在这里插入图片描述
selectpage方法中接受自定义查询条件,接受方式为数组,因此,只需在html页面定义自定义查询条件就可。
data-params='{"custom[fid]":1}'的意思就是:where(‘fid’,1)。
方案二:
链接: fastadmin问答给selectpage添加自定义查询条件.

六、解决前台引入表格后出现破版问题

破版展示:
在这里插入图片描述
在这里插入图片描述
解决方案
在这里插入图片描述
找到meta.html,加入样式:

<style>.toolbar,.search,.columns-right{margin-top: 10px!important;}
style>

最终效果
在这里插入图片描述

七、去掉表格中默认的搜索样式

在这里插入图片描述
在相应的js文件中增加:

search:false,
showColumns:false,
showToggle:false,
showExport:false,
commonSearch:false,

在这里插入图片描述

八、控制器方法中传值到js

控制器里:$this->assignconfig("ids",$ids);
js里:add_url: 'my_ratio/add?ids='+Config.ids,

九、在原有键值里对在增加

在这里插入图片描述

        <div class="form-group row"><label class="control-label col-xs-12 col-sm-2">添加睡眠信息:label><div class="col-xs-12 col-sm-8"><dl class="fieldlist" data-template="eventtpl4" data-name="row[sleep]"><dd><ins>睡眠时间ins><ins>备注ins><ins>时长(分钟)ins><ins>状态ins>dd><dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus">i> 追加a>dd>dl><script id="eventtpl4" type="text/html"><dd class="form-inline"><ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][sleep_time]" class="form-control" value="<%=row.sleep_time%>" placeholder="睡眠时间"/></ins><ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][remarks]" class="form-control" value="<%=row.remarks%>" placeholder="备注"/></ins><ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][duration]" class="form-control" value="<%=row.duration%>" placeholder="时长" size="10"/></ins><ins><input type="text" data-rule="required" name="<%=name%>[<%=index%>][status]" class="form-control selectpage" data-params='{"custom[fid]":4}' data-source="My_all_type/index" data-field="type_name" value="<%=row.status%>" placeholder="状态" size="10"/></ins><span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span><span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>script>div>div>

十、使用 fastadmin的小程序支付

在这里插入图片描述
以上三项分别为:

  • minapp_id:小程序APPID,从小程序平台获取。
  • mch_id:微信商户id
  • key:微信商户key

控制器中:

/*** 购买试题*/public function payQuestion(){try{$money = trim($this->request->request("money"));$qid = $this->request->request("qid");if (empty($money)||empty($qid)){$this->error("缺少必要参数");}// if ($money<1){//     $this->error("支付金额不正确");// }//判断是否有该试题$res = Db::name("questions")->where("id",$qid)->find();if (empty($res)){$this->error("不存在该试题");}//判断试题金额是否与传过来的金额一致if ($res['money']!=$money){$this->error("试题金额错误");}//获取当前用户的openid$openid = Db::name("user")->where("id",$this->auth->id)->value("username");if ($openid==""){$this->error("不存在此账户");}$pay = new \addons\epay\controller\Index();$data = $pay->experience($openid,$qid,$money,"wechat","miniapp");$this->success($data ? "ok" : '暂无数据',$data,$data?1:2);}catch (Exception $e) {$this->error($e->getMessage());}}

addon插件下的index控制器:

/*** 体验,仅供开发测试*/public function experience($openid,$qid,$amount,$type,$method){if (!$amount || $amount < 0) {$this->error("支付金额必须大于0");}if (!$type || !in_array($type, ['alipay', 'wechat'])) {$this->error("支付类型不能为空");}//订单号$out_trade_no = date("YmdHis") . mt_rand(100000, 999999);//订单标题$title = '购买试题';$data['uid'] = $this->auth->id;$data['out_trade_no'] = $out_trade_no;$data['add_time'] = time();$data['qid'] = $qid;$data['money'] = $amount;Db::name("paylog")->insert($data);//回调链接$notifyurl = $this->request->root(true) . '/addons/epay/index/notifyx/paytype/' . $type;$returnurl = $this->request->root(true) . '/addons/epay/index/returnx/paytype/' . $type . '/out_trade_no/' . $out_trade_no;return Service::submitOrder($openid,$amount, $out_trade_no, $type, $title, $notifyurl, $returnurl, $method);}

需要openid参数,从小程序授权后获取。

十一、小程序登陆

流程:首先,前端拉起授权,获得到code以后,请求后端接口,后端请求得到appid和unionid,对此进行操作和处理,最终返回给前端一个token即可(看个人需求)。

/*** 小程序登陆*/public function minappLogin(){$appid = '微信小程序appid';//微信小程序appid$secret = '微信小程序secret';//微信小程序secret$code = input('code');//接收code参数,换取用户唯一标识$username = input('username');//接收用户名$headimgurl = input('headimgurl');//接收用户头像//下面url是请求微信端地址获取用户唯一标识的,对应的appid和secret改成自己的$url="https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$code."&grant_type=authorization_code";$res = $this->http_curl($url);//https_request是封装的发送请求的方法if (isset($res['errcode'])){$this->error("请求微信接口失败");}//判断是否存在该openid$is_exit = Db::name("user")->where("username",$res["openid"])->find();if ($is_exit){//直接登陆$param["account"] = $res["openid"];$param["password"] = "123456";$url = "http://xxxxxx.com/api/User/login";$data = json_decode($this->post($url,$param),true);$token = $data['data']['userinfo']['token'];$this->success($data?"ok":"请求数据为空",$data,$data?1:2);}else{//注册并登陆$param['username'] = $res["openid"];$param['password'] = "123456";$param["nickname"] = $username;$param["avatar"] = $headimgurl;$url = "http://xxxxxx.com/api/User/register";$data = json_decode($this->post($url,$param),true);if ($data["code"]==1){$param["account"] = $res["openid"];$param["password"] = "123456";$urls = "http://xxxxxx.com/api/User/login";$data = json_decode($this->post($urls,$param),true);$this->success($data?"ok":"请求数据为空",$data,$data?1:2);}else{$this->error("注册失败");}}

十二、自定义按钮并传值

如果要控制按钮是否显示,在visible属性值中,通过row.字段名进行判断即可。

// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: 'id',sortName: 'id',columns: [[{checkbox: true},{field: 'id', title: __('Id')},{field: 'custname', title: __('Custname')},{field: 'petname', title: __('Petname')},{field: 'blance', title: __('Blance'), operate:'BETWEEN'},{field: 'creattime', title: __('Creattime')},{field: 'updatetime', title: __('Updatetime')},{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate,buttons: [{name: 'zidingyi',text: __('充值扣费记录'),title: __('充值扣费记录'),classname: 'btn btn-xs btn-primary btn-dialog',url: 'operation/index?id={id}',visible: function (row) {console.log(row) //可打印出所有字段的数组。//返回true时按钮显示,返回false隐藏return true;}},]}]]});

其中id为上方field字段中的id名称。

在这里插入图片描述

十三、在添加按钮上进行传值

在这里插入图片描述
在控制器中的index方法中将uid映射过去:

/*** 查看*/public function index(){//当前是否为关联查询$this->relationSearch = true;//设置过滤方法$this->request->filter(['strip_tags']);if ($this->request->isAjax()){$uid = $this->request->request('uid');//如果发送的来源是Selectpage,则转发到Selectpageif ($this->request->request('keyField')){return $this->selectpage();}list($where, $sort, $order, $offset, $limit) = $this->buildparams();$total = $this->model->with(['user'])->where($where)->order($sort, $order)->count();$list = $this->model->with(['user'])->where($where)->order($sort, $order)->limit($offset, $limit)->select();foreach ($list as $row) {$row->visible(['id','balance_log','type','balance','add_time','year','month','uid']);$row->visible(['user']);$row->getRelation('user')->visible(['mobile']);}$arr = [];$list = collection($list)->toArray();if ($list){foreach ($list as $k=>$v){if ($v['uid']==$uid){$arr[] = $v;}}}$result = array("total" => count($arr), "rows" => $arr);return json($result);}$uid = $this->request->request('uid');$this->assign("uid",$uid);		//将uid映射过去return $this->view->fetch();}

首页中在添加按钮的链接中将uid传过去:

<div class="panel panel-default panel-intro">{:build_heading()}<div class="panel-body"><div id="myTabContent" class="tab-content"><div class="tab-pane fade active in" id="one"><div class="widget-body no-padding"><div id="toolbar" class="toolbar"><a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh">i> a><a href="{:url('fundlog/add')}?uid={$uid}" class="btn btn-success btn-add {:$auth->check('fundlog/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus">i> {:__('Add')}a><a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('fundlog/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil">i> {:__('Edit')}a><a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('fundlog/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash">i> {:__('Delete')}a><a href="javascript:;" class="btn btn-danger btn-import {:$auth->check('fundlog/import')?'':'hide'}" title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" data-mimetype="csv,xls,xlsx" data-multiple="false"><i class="fa fa-upload">i> {:__('Import')}a><div class="dropdown btn-group {:$auth->check('fundlog/multi')?'':'hide'}"><a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog">i> {:__('More')}a><ul class="dropdown-menu text-left" role="menu"><li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye">i> {:__('Set to normal')}a>li><li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash">i> {:__('Set to hidden')}a>li>ul>div>div><table id="table" class="table table-striped table-bordered table-hover table-nowrap"data-operate-edit="{:$auth->check('fundlog/edit')}" data-operate-del="{:$auth->check('fundlog/del')}" width="100%">table>div>div>div>div>
div>

十四、fastadmin上传视频至七牛云

一、安装七牛云插件
在这里插入图片描述
配置参数:

在这里插入图片描述

安装好后,清下缓存。

二、增加上传视频的文件格式(例如:mp4)

找到application\extra\upload.php文件,增加mp4格式:
在这里插入图片描述
修改视图中的add.html,增加上传类型mp4:
在这里插入图片描述
三、上传以及展示效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十五、fastadmin后台能访问,前台路径错误 ,前台路径错误,后台又能访问。

错误场景:一般新建一个站点后,把fastadmin项目扔进去后并要配置一个虚拟目录的配置。

一般都是加上这句:

if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=$1  last;break;
}

这句话在之前的fastadmin版本是可以用的,等后来更新为admin.php为随机名称后,这句不好使了就,加上这句能访问后台,但是前台不能访问了,不加这句能访问前台,但是后台不能访问了。


之前的错误写法:

server
{listen 80;server_name dingdongbackend.wangchuangcode.cn;root /www/wwwroot/dingdongbackend.wangchuangcode.cn/public;if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=$1  last;break;}location / {index  index.html index.htm index.php;#主要是这一段一定要确保存在}access_log  /www/wwwlogs/dingdongbackend.wangchuangcode.cn.log;error_log  /www/wwwlogs/dingdongbackend.wangchuangcode.cn.error.log;
}

正确的写法:

server
{listen 80;server_name dingdongbackend.wangchuangcode.cn;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/dingdongbackend.wangchuangcode.cn/public;location / {index  index.html index.htm index.php;#主要是这一段一定要确保存在if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;break;}}access_log  /www/wwwlogs/dingdongbackend.wangchuangcode.cn.log;error_log  /www/wwwlogs/dingdongbackend.wangchuangcode.cn.error.log;
}

总结:

if (!-e $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;break;
}

放到

location / {}

中即可。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部