如何确定CodeIgniter是否存在第一个段?

时间:2012-06-08 10:14:54

标签: codeigniter codeigniter-2 codeigniter-url

我想我会因为拔毛而成为秃头......

根据CodeIgniter教程以及我之前的经验,我可以轻松确定是否存在第2,第3或第4段或它们的值。

if($this->uri->segment(3)) {
     //do something
}

if($this->uri->segment(3)=="foo") {
     //do something
}

除了FIRST SEGMENT之外的所有其他部分都可以!

我不能对FIRST SEGMENT使用任何条件语句!

if($ this-> uri-> segment(1))不起作用。因为它总是返回true。但我想检查第一段是否存在。当我浏览我的网站时,由于删除了index.php,它看起来像www.domain.com。所有其他控制器都像domain.com/firstcontroller,domain.com/secondcontroller

但是我需要为WEB ROOT创建一个条件。

我尝试了__construct()函数,但它也没有用。

我想做的事情是: 如果当前页面不是webroot(即使没有第一段),或者它不是我的主控制器,我会显示一些HTML。

你能帮帮忙吗?

编辑: 呃......对不起我已经找到了问题所在。这是关于使用正确的运算符。我应该使用XOR而不是OR。因此确定$ this-> uri->段(1)没有问题......它和其他段一样......

4 个答案:

答案 0 :(得分:0)

在运行此功能之前,您是否尝试过类型转换?

E.g

$seg = (int) 1; $this->uri->segment($seg);

或者您可以尝试从

中获取数据
$seg_array = $this->uri->segment_array();

然后只检查返回的数组。

答案 1 :(得分:0)

不确定为什么你需要这个,你可以在哪里调用它?第一个段始终是执行的控制器的名称,第二个段是来自该控制器的函数的名称。如果您尚未更改默认路由。

$this->uri->uri_string()会返回控制器/方法。您可能还想查看$this->uri->ruri_string()并找到更多信息here。希望这会对你有所帮助。

答案 2 :(得分:0)

if ($this->router->class != $this->router->default_controller) {
    // Run stuff here
}

亲自试试:print_r($this->router)

您可以通过以下方式确定:

if ($this->router->class != $this->router->default_controller or $this->router->directory or $this->router->method != 'index') {
    // Run stuff here
}

答案 3 :(得分:0)

我应该在条件函数中使用XOR而不是OR。因此确定$this->uri->segment(1)没有问题......它和其他细分市场一样......