2011-10-17 138 views
0

我想獲得觸發控制器內部控制器的段深度。代碼點火器控制器uri段

例如: 我有控制器/數據/ 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

任何想法如何完成?

EDIT 澄清:

我想在URI中的部分觸發控制器(忽略自定義路由)的深度。

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

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

只有第2個部分各段的觸發控制器

我至今是:

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:

添加答案

+2

吧?我不明白,你想要所有的URI元素(並計算它們)?在CI中有功能..否則我不知道你的意思? – Jakub

+2

你可以嘗試使用CI路由。 –

+0

@Jakub我還沒有找到任何CI在這 – galchen

回答

1

我從帖子刪除,並增加一條,作爲一個答案:

看到@豪爾赫的評論暗示使用CI路線後,我發現了一個簡單的解決方案:

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