解决ThinkPHP3.1由于独立分组导致部分__ACTION__和U(“”)方法失效

来源:互联网 发布:恐怖黎明官方数据库 编辑:程序博客网 时间:2024/06/14 09:02

描述

TP3.1使用独立分组,分组默认路径为/Modules/,在Modules下有Index和Admin两个文件夹,分别是两个模块,路径格式如下所示。

11

遇到的问题:

在/Index操作模块下, __ACTION__和U(“”)方法(请注意使用默认的U(“”),而分页类Page()中如果没有传递第四个参数,那么就会使用U(“”)产生当前的路径,从而生成分页的url)。

但是现在发现在Index模块下的__ACTION__方法和U(“”)方法生成的url均不对,少了一个./Index/(分组名),所以分页也出现了问题。

这个问题在Index/的操作下才会出现,但是Admin/下的操作则不会出现(目前我也不知道为什么,这个问题蛋疼了好久)。

在两个操作中使用的代码相同,生成的路径url对比如图:

【可以明显的看出,代码一样,但是Index下的路径少了一个Index分组,/Index/Index/pointlist/变成了 /Index/pointlist/】

1

2

因为上述问题的存在,导致分页的时候,分页显示不正确

解决问题:

Page类在引用的时候有四个参数分别如下,

 /**     * 架构函数     * @access public     * @param array $totalRows  总的记录数     * @param array $listRows  每页显示记录数     * @param array $parameter  分页跳转的参数     */    public function __construct($totalRows,$listRows='',$parameter='',$url='')

如果我们不传递第四个URL参数,那么他会使用U(“”)方法生成一个路径,当然可以修改源代码,但是修改源代码以方便无法做到响应式的创造url,另外由于只有Index分组存在这个问题(我一直在想是不是因为两个Index重复所以导致了一个),所以使用另外一种解决方案。

创造一个全局函数,不能使用__ACTION__,也不能用__SELF__,都不起作用(我试过了),因此创建一个函数,全局性质的函数,模拟U(“”)生成路径。

函数的名字命名为 function UU(),函数只是返回一个正常的 __ACTION__应该有的(也就是 /Index/Index/pointlist),加上了分组名称。

在声明Page类的对象的时候,将第四个参数传递进去 即 $Page=new Page($count,20,”,UU());  第三个参数不需要给的。

代码:

函数很简单,只有几行,但是这个发现问题和研究源代码的过程是很有意义的。

最近我写代码的注释真的是越来越多。

下面就是代码和注释,如果站点代码显示有问题,代码可以去gitosc查看

链接地址为:http://git.oschina.net/postbird/0yj641p7dnhc3woxk5em841.code.git

 

//解决系统由于使用了自定义分组产生的分页路径问题// 函数说明 模拟U("")方法生成正确的当前地址,并且最后执行操作/**powered by postbird *http://www.ptbird.cn*lience MIT*2016-10-24*//*问题描述: 自定义分组路径为 APP/Modules/Index/IndexAction.class.php 发现 __ACTION__,U(""), 两种形式均少一个Index 正常路径应为 xxx/Index/Index/pointlist (分组名/模块名/操作名) 发现分组名没了 //后期发现的问题 ;发现只有分组名称为Index,而操作是Index/Action/的时候 __ACTION__和U("")方法才会产生问题, 从而导致在分页过程中使用U("")方法出现问题*//**  主要用在 Page上的第四个参数  ------------------------------------------| $page=new Page($count,100,'',UU()); |    ------------------------------------------     * array $totalRows  总的记录数     *  array $listRows  每页显示记录数     *  array $parameter  分页跳转的参数     * public function __construct($totalRows,$listRows='',$parameter='',$url='')     */function UU(){//正确的__ACTION__应该为:// /二级目录(如果有)/index.php(如果文件)/Index(独立模块名 并加上GROUP_NAME)/Index(ACTION)/pointlist(操作)// 问题 :/sciplat/index.php/Index/pointlist 可以看出少了一个Index(模块名称 并加上GROUP_NAME)$str =__ACTION__;//去掉index.php,并加上GROUP_NAME$str =GROUP_NAME.substr($str,strpos($str,"index.php/")+strlen("index.php/")-1,strlen($str))."/p/";// dump($str);// 效果 string(22) "/Index/Index/pointlist"return $str;}
赞(0)
0 0
原创粉丝点击