簡體   English   中英

代碼點火器控制器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

段的前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__,因為我希望在父控制器中使用它

解:

添加為答案

我從帖子中刪除了它,並將其添加為答案:

在看到@Jorge的建議使用CI路由的評論后,我找到了一個簡單的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM