我尝试了很多方法来解决这个问题但没有办法。
假设我有一个班级:
class MyTestClass{
function testPrint($a = '', $b = '', $c = '')
{
echo '1: ' . $a . ', 2: ' . $b . ', 3: ' . $c;
}
}
如果我使用此URL访问此功能
http://localhost/ci/index.php/myTestClass/testPrint/a/b/c
您会看到1: a, 2: b, 3: c
作为输出,没关系。
但是如果我将$ b分配给空字符串,则该网址将更改为http://localhost/ci/index.php/myTestClass/testPrint/a//c
输出将更改为1: a, 2: c, 3:
似乎CI忽略了缺少的参数。
问题是如何防止CI忽略uri中间缺少的参数?
我刚才的预期输出是1: a, 2: , 3: c
顺便说一句,我尝试使用$this->uri->segment(n)
来保护参数位置,但它不起作用。
我尝试通过添加:
来更新routes.php $route['myTestClass/(:any)/(:any)/(:any)/(:any)'] = "myTestClass/$1/$2/$3/$4";
但这不会改变任何事情。
有什么想法吗?
答案 0 :(得分:0)
我不确定你的情况是否可行,但我要做的是使用一个简短的虚拟字符串(本例中为xyz),以防止必须处理/ /
然后过滤它出来了。
http://localhost/ci/index.php/myTestClass/testPrint/a/xyz/c
if ($b == 'xyz')
{
$b = ''
}
如果可能,请尝试POST变量而不是使用URI段。这会让事情变得容易多了。 希望这可以帮助。
更新
由于您无法发帖,enabling query strings怎么样?