代码点火器控制器uri段


code igniter controller uri segment

我正试图获得触发控制器内部控制器的段深度。

例如

:我有controllers/data/something。php

class Something extends CI_Controller {
    public function index()
    {
        $depth = ???;   // should be 2
    }
}

将通过www.domain.com/data/something

加载

计算片段是不相关的,因为我可以去:www.domain.com/data/something/anotherthing/

,仍然运行前一个控制器,但深度应保持2

你知道怎么做吗?

编辑澄清:

我想要uri中触发控制器的部分的深度(忽略自定义路由)。

我不想要所有的uri元素,因为在控制器/方法之后可能有更多的元素。

。domain.com/controller_name/method_name/param1/param2

只有前两个片段触发了控制器

我现在看到的是:

public function route_segments()
{
    $path = dirname(BASEPATH) . '/'. APPPATH;
    $request = substr(str_replace('''','/',__FILE__), strlen($path) - strlen(EXT));
    $request = substr($request, strpos($request, '/'));
    $trigger_path = '';
    for ($i=1, $n = $this->uri->total_segments(); $i<=$n && $trigger_path != $request; $i++){
        $trigger_path .= '/'.$this->uri->segment($i);
    }
    $route_segments = explode('/',trim($trigger_path,'/'));
    return count($route_segments);
}

问题是我不想使用__FILE__,因为我希望它在父控制器

解决方案:

作为答案添加

我将它从帖子中删除并添加为答案:

看到@Jorge建议使用CI路由的评论后,我发现了一个简单的解决方案:

private function get_route_depth()
{
    $this->load->library('router');
    $route_segments = explode('/',trim($this->router->directory,'/'));
    return count($route_segments);
}