基于PESCMS 2.8核心版本起,将移出URL模式功能。若需美化URL,请在对应程序的后台填写自定义路由进行美化。
PESCMS提供了3种URL模式让大家选择,下面我们以访问控制器 App/Home/GET/index来说明:
传统模式:G&M&A传统模式即最原始的URL地址,对于整套程序来说兼容性最好。访问的URL地址为: http://域名/index.php?g=Home&m=Index&a=index
横杠模式:G-M-A横杠模式属于美化URL的模式,它隐藏了gma参数名称,每一个横杠表示一个参数分隔符。前两个为GMA的缺省值。访问的URL地址为:http//域名/index.php/Home-Index-index
斜杠模式:G/M/A斜杠模式和横杠模式一样,主要区别在于斜杠分割符。访问的URL地址为:http://域名/index.php/Home/Index/index
在2和3模式中,若您需要带上参数,请记住该规则:在GMA后的开始,每一个分隔符前后均表示 参数 => 内容 值。如:http://域名/index.php/Home/Index/index/id/1 对应的参数为 $_GET['id'] = 1 的意思
参数陷阱
当程序URL模式使用的为非传统模式,可能遇到参数陷阱的问题。该现象主要出现在以GET形式请求的参数中,存在与PESCMS的URL分隔符一样的关键词,程序错误地对其进行参数分割。如:我们程序有一以GET形式提交的搜索功能,其具备了筛选日期的功能。其提交的日期形式为:2015-09-10
按照正常的设计,我们首先设想的URL会是:http://域名/index.php/Home/Order/list/begin/2015-01-01/end/2015-01-31 ,在控制器中打印$_GET变量,结果非设想的样子:
- Array
- (
- [begin] => 2015
- [end] => 2015
- [01] => 31 # 键值名称重复,内容覆写为 31
- )
对于此现象,我们可以将日期转行为时间戳后,再进行提交则解决了问题。GET提交时,URL显示为:http://域名/index.php/Home/Order/list/begin/2015-01-01/end/2015-01-31 。在控制器打印$_GET变量:
- Array
- (
- [begin] => 1420041600 # 获得的为时间戳,我们只需要用strtotime函数转为正常的日期则可了。
- [end] => 1422719999
- )
现在和我们预想的一致了。对于参数陷阱,是一个比较难以解决的问题。毕竟程序需要参照值进行参数分割,大家在使用中要注意该现象则可。
发表于 2018-05-14
设置URL模式
PESCMS2.5版本起,URL模式都存放于配置文件中,解除依赖数据库选项的问题。具体的修改值,请参考《配置文件》一章。
PESCMS2.5以前的版本或者某些基于PESCMS的定制软件,URL模式都可以通过程序的后台(PESCMS2.5也可以后台修改),或者数据库进行修改:
option_namenamevalueurlModelURL格式{"index":"1","urlModel":"1","suffix":"1"}
{"index":"1","urlModel":"1","suffix":"1"} 为一个json格式,具体的修改数值,请参考《配置文件》一章。