2011-10-17 19 views
0

コントローラーをトリガーしたセグメントの深さをコントローラー内で取得しようとしています。私は、コントローラ/データ/ something.phpコードイグナイターコントローラーURIセグメント

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

は私が行くことができるので、セグメントをカウントすることは無関係だろう

www.domain.com/data/somethingを通じてロードしてい :例えば

To: 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); 
} 

問題は私にはないです

として追加:私はそれをしたいので、

がSOLUTION親コントローラに__FILE__を使用したいです答え

+2

ハァッ:

CIのルートを使用することを示唆しているホルヘさんのコメント@見た後、私は簡単な解決策を見つけましたか?私は理解していない、あなたはすべてのURIの要素が(そしてそれらを数えますか?それにはCIの機能があります。そうでなければ、あなたは何を意味するのか分かりません。 – Jakub

+2

CIルートを使用できます。 –

+0

@Jakub私はこれについてCIで何も見つかりませんでした – galchen

答えて

1

は私がポストからそれを取り出して、答えとしてこれを追加しました:

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