五、请求接口返回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"); }
然后将跨域检测注释掉
六、解决列表页显示的是分类ID而不是分类名称
其实这个问题很好解决,不要想的太过复杂。
你可以试想一下在thinkphp框架是怎么解决这个问题的。
在thinkphp中解决这个问题就是使用获取器来处理的。
只需要在对应的模型中设置获取器即可。
页面显示
但是真的是这样处理的吗?不要一看数据出来了,就万事大吉了。
你可以思考一下,在index页面没有显示出分类的名字,但是在修改时却出现了名字。
那么是不是可以得出的结论为首页没有使用获取器,而add、edit页面使用了获取器。
若按照上边的方法,直接暴力的在模型中添加获取器,会造成一个非常严重的问题,那就是修改会无法显示数据。不信你可以试一下。
就跟下图一样,这不是闹玩呢木。
所以说这种方案肯定不行。
试想一下,在thinkphp框架中,除了获取器可以表字段处理外,同样使用模型关联也可以。当然用最原始的json方法也是可以的。
在fastadmin中,控制器的方法都继承于application/admin/library/traits/Backend.php这个文件中。
在这个文件中可以看到index方法
那只能做的一件事情就是在需要显示分类名称的控制器中重写这个方法index呗!
在重写之前需要做的一件事情就是需要在对应的模型中写上模型关联
然后在你需要的控制器上重写index代码
源码
/** * 查看 */ 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.
文档中说是还需要设置属性设置属性protected $relationSearch = true;,反正咔咔测试设置不设置都一样,你们看着来,目前还没发现这个参数到底是控制什么的。官方文档说是控制开启关联查询,但是经测试,好像没什么大碍。
来看一下最终结果吧!
如果只是一对一那解决方案会有很多种。
你可以使用json来直接查询,同样你也可以循环查询出来的数据,然后根据每个分类ID进行查询出对应的分类名即可。