我正在尝试获取触发控制器内控制器的段深度。
例如: 我有控制器/ 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__,因为我想在父控制器
中使用它SOLUTION:
添加为答案
答案 0 :(得分:1)
我从帖子中删除了它并将其添加为答案:
在看到@Jorge建议使用CI路线的评论后,我找到了一个简单的解决方案:
private function get_route_depth()
{
$this->load->library('router');
$route_segments = explode('/',trim($this->router->directory,'/'));
return count($route_segments);
}