让你少踩坑的fastadmin教程(2)

简介: 让你少踩坑的fastadmin教程

五、请求接口返回403

将以下代码添加到api基类即可

header("Access-Control-Allow-Methods: *");
header('Access-Control-Allow-Origin: 域名');
header("access-control-allow-credentials: true");
// 响应头设置
// header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){
    // 浏览器页面ajax跨域请求会请求2次,
    // 第一次会发送OPTIONS预请求,不进行处理,直接exit返回,
    // 但因为下次发送真正的请求头部有带token,
    // 所以这里设置允许下次请求头带token否者下次请求无法成功
    header('Access-Control-Allow-Headers:x-requested-with,content-type,token,userid,laravelsession');
    exit("ok");
}

image.png

然后将跨域检测注释掉


image.png


六、解决列表页显示的是分类ID而不是分类名称

其实这个问题很好解决,不要想的太过复杂。


你可以试想一下在thinkphp框架是怎么解决这个问题的。


在thinkphp中解决这个问题就是使用获取器来处理的。


只需要在对应的模型中设置获取器即可。


image.png


页面显示


image.png


但是真的是这样处理的吗?不要一看数据出来了,就万事大吉了。


你可以思考一下,在index页面没有显示出分类的名字,但是在修改时却出现了名字。


那么是不是可以得出的结论为首页没有使用获取器,而add、edit页面使用了获取器。


若按照上边的方法,直接暴力的在模型中添加获取器,会造成一个非常严重的问题,那就是修改会无法显示数据。不信你可以试一下。


就跟下图一样,这不是闹玩呢木。


所以说这种方案肯定不行。


image.png


试想一下,在thinkphp框架中,除了获取器可以表字段处理外,同样使用模型关联也可以。当然用最原始的json方法也是可以的。


在fastadmin中,控制器的方法都继承于application/admin/library/traits/Backend.php这个文件中。


在这个文件中可以看到index方法


image.png


那只能做的一件事情就是在需要显示分类名称的控制器中重写这个方法index呗!


在重写之前需要做的一件事情就是需要在对应的模型中写上模型关联


image.png


然后在你需要的控制器上重写index代码

image.png



源码

    /**
     * 查看
     */
    public function index()
    {
        //设置过滤方法
        $this->request->filter(['strip_tags', 'trim']);
        if ($this->request->isAjax()) {
            //如果发送的来源是Selectpage,则转发到Selectpage
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();
            $list = $this->model
                ->with('category')
                ->where($where)
                ->order($sort, $order)
                ->paginate($limit);
            $result = array("total" => $list->total(), "rows" => $list->items());
            return json($result);
        }
        return $this->view->fetch();
    }


到这里可并没有万事大吉啊!还需要修改模板,在对应的js文件中添加即可

{field: 'category.name', title: __('分类名称'), formatter:Table.api.formatter.



image.png


文档中说是还需要设置属性设置属性protected $relationSearch = true;,反正咔咔测试设置不设置都一样,你们看着来,目前还没发现这个参数到底是控制什么的。官方文档说是控制开启关联查询,但是经测试,好像没什么大碍。


来看一下最终结果吧!


image.png


如果只是一对一那解决方案会有很多种。


你可以使用json来直接查询,同样你也可以循环查询出来的数据,然后根据每个分类ID进行查询出对应的分类名即可。


相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
分享68个Python爬虫源码总有一个是你想要的
分享68个Python爬虫源码总有一个是你想要的
99 0
|
8月前
|
关系型数据库 MySQL Windows
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
mysql彻底卸载干净的5个步骤,超多图超详细保姆级教程最新教程新手小白轻松上手
5476 1
|
JavaScript 前端开发 数据库
让你少踩坑的fastadmin教程(3)
让你少踩坑的fastadmin教程
1082 0
让你少踩坑的fastadmin教程(3)
|
25天前
|
数据库
一款挺不错网站维护页面源码
一款挺不错网站维护页面源码,单HTML不需要数据库,上传到你的虚拟机就可以用做维护页面还不错,用处多。。
15 2
一款挺不错网站维护页面源码
|
3月前
|
数据采集 数据可视化 Java
分享66个Python爬虫源码总有一个是你想要的
分享66个Python爬虫源码总有一个是你想要的
86 1
|
12月前
|
存储 小程序 容器
想做个答题类的微信小游戏?读这篇文章就够了
本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
149 0
|
SQL 测试技术 数据库
软件测试|SQL数据库相关操作,这篇文章就够了
软件测试|SQL数据库相关操作,这篇文章就够了
91 0
|
缓存 JavaScript 前端开发
前端常规面试题 - 初级开发01(含答案)
浅谈一下如何避免用户多次点击造成的多次请求
196 0
|
移动开发 资源调度 前端开发
小白如何从项目入手学习前端
前言 已有基础:虽然说是小白,但是本人曾在大一通过freecodecamp平台学习过html5、css中的标签、样式等知识,也曾经用js写过一些简单的算法题,并了解过ES6(不过因为不常用,相当于只记得名字了。
107 0
|
SQL 自然语言处理 关系型数据库
数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】
数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】
96 0
数据库知识点太多?作为测试掌握这些就够了【精简重点版 >直击面试>建议收藏】