#1 GoolLong
问题现象:
我使用了 spUrlRewrite 功能,并且定义了 map 和 args
'map' => array(
'login' => 'main@login',
),
'args' => array(
'login' => array('act'),
),
如果我访问 /login/abc.html,控制器中可以用 $this->spArgs('act') 捕获到"abc";
但如果我用表单提交到 /login.html,即使表单中有
,控制器中也无法用 $this->spArgs('act') 捕获到"abc";
(由于时间有限,我没仔细去读sp内核程序,所以以下的原因分析可能存在错误)
原因分析:
我大概跟踪了一下,使用 spArgs 时,spArgs 类中的 args 属性中已经将 act 的值置为空了,所以不能用 $this->spArgs('act') 来获取。估计是 spUrlRewrite 在分解url的参数时,得不到act的参数,所以置为空,并且影响了后面的 spArgs 类。
解决方法:
1、使用 $this->spArgs('act', '', 'post') 来获取;
2、表单提交地址直接使用 /login/abc.html。
建议:
如果url中没有map参数表中对应的参数值,就不应该修改 spArgs 类的 args 属性中对应的变量值。很简单的道理:
既要允许 /?m=main&a=login&act=abc 这种GET方式;
也要允许 /?m=main&a=login POST act=abc 这种方式。
请jake酌情考虑。
2011-05-24 00:31:29
#2 jake
spUrlRewrite对应的是spUrl生成的地址,所以只要在form的action里面使用spUrl,那么参数就可以传过去了,也就是楼主说的解决方法2。
这里产生这个问题,是因为楼主没有在form的action里面使用spUrl的地址,而是直接写上地址:“如果我用表单提交到 /login.html”,这样并不是sp所提倡的用法。sp是希望同一个应用里面全部的地址都用spUrl产生,以便可以适应各种地址模式。
当然,如果不使用spUrl,那么spUrlRewrite也无法获取到参数。
2011-05-24 07:29:11
#3 GoolLong
在模板中,我是使用的spUrl来生成地址的。
使用以下格式,就无法在控制器内直接用 $this->spArgs('act') 获得"abc"这个值
必须使用以下格式才行
2011-05-24 13:39:31
#4 GoolLong
我想描述的问题重点在于,在map参数映射表中配置了参数后,必须通过url把参数传进去,否则即使你在表单中有同名的参数,也是获取不到正确的值的。除非你在控制器中显式的指定从POST中获取数据。
2011-05-24 13:45:10
#5 jake
其实你理解错了spUrlRewrite的配置,如果你需要在get上面直接传输参数,那么可以不设置'login' => array('act'),这个映射,直接通过 /login.html?act=xxx 来get传递就可以,这也是方便ajax时候使用的。
'login' => array('act'), 里面的act是设置到地址里面的参数,所以一定要从“地址”里面获取,对吧,因为它连“参数名”也没有。
2011-05-24 14:04:14
#6 wind4
/login.html?act=xxx
最喜欢这种方式传值。
其实spUrlRewrite做的是URL重写。但是POST数据包中的数据已经不属于URL了。
2011-08-10 16:15:04
#7 wind4
/login.html?act=xxx
最喜欢这种方式传值。
其实spUrlRewrite做的是URL重写。但是POST数据包中的数据已经不属于URL了。
2011-08-10 16:15:58