没有通过时的Codeigniter URI段

时间:2019-04-30 20:06:29

标签: php codeigniter

我在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.
        }

2 个答案:

答案 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的答案