我在Controller上工作,我想确保还有第二个URI段。例如,当我编写www.example.com/controller/login时,它可以工作,并返回第二个段“ login”。但是,当我不传递任何第二个段时,仅www.example.com/controller它不会返回任何内容。我试图检查它是否为null或false还是一样,不起作用。有人可以帮助我吗?看来,如果我在控制器之后不传递函数或方法,我将一无所获。
$seg = $this->uri->segment(2, false);
if($seg != NULL) {
echo $seg; //this works when I pass login
}else{
$first_seg = false; // if I dont pass login, it doesn not working.
}
答案 0 :(得分:1)
您误解了在代码初始化器中映射URI的方式。
在Codeigniter中:
example.com/segment1/segment2/segment3/..../segmentN
按以下方式映射: segment1 =控制器
segment2 =方法
segment3 =参数1
segment4 =参数2
...
segmentN =参数N
如果缺少第2段,则您未指定方法,因此将不会发生任何事情。
默认情况下,如果未指定任何方法,CI将尝试使用index()
方法。因此,您可能想在segment(2)
方法内或控制器的构造函数中处理缺少的index
。否则,您将甚至无法处理该请求。
答案 1 :(得分:1)
仅关注示例“调试代码”,因为它存在问题,调试代码对于正确设置很重要。
因此,这更像是“了解调试代码以调试代码” 答案。
您说您已经阅读了CI用户指南。
所以你有...
$seg = $this->uri->segment(2, false);
if($seg != NULL) {
echo $seg; //this works when I pass login
}else{
$first_seg = false; // if I dont pass login, it doesn't not working.
}
您所说的...如果没有第二段,请将$ seg设置为false。如果$ seg不为NULL,则回显$ seg。在这种情况下,$ seg永远不会为NULL。
我不理会您的$ first_seg,因为它在微风中摇曳,我不知道它的用途。它在哪里设置为True等?
有效地,您的代码变成了
$seg = $this->uri->segment(2, false); // Override the default NULL to false
if($seg != NULL) {
echo $seg; // This will ALWAYS run as $seg is Never NULL
}
真正归结为..
$seg = $this->uri->segment(2, false); // Override the default NULL to false
echo $seg;
有趣的是,您不能使用echo显示false。它不会在页面上显示任何内容(空白)。您可以使用echo $seg ? $seg: '0';
之类的东西。因此,如果$ seg为true(不是false),则回显$ seg else,否则显示0表示false。
您可以简单地使用...
$seg = $this->uri->segment(2, 'Nothing');
echo $seg;
或者更好
$seg = $this->uri->segment(2, 'index'); // No 2nd segment means default index method.
echo $seg;
希望对未来有帮助。
并确保您阅读了 Javier Larroulet的答案。