2017-10-18 31 views
0

我有一個完全動態的網站,它創建菜單,動態地從後端查看所有內容。 現在讓我告訴你網址的順序創建:在CI中配置路由以接受n級URL地址

http://localhost/occ/level1/level2/....leveln 

基本上1級level2的,...... leveln是一個特定的菜單例如家的水平(層次)/ contact_section/contact_us現在管理員可以創建多個頁面,也可以創建他想要的菜單級別,所以URL邏輯是什麼,它將繼續跟隨父級,直到最高級父級,並返回URL並在URL末尾將是我傳遞給一個通用控制器的名稱,該通用控制器基本上採用運行db查詢獲取的名稱所有的數據,然後在此處顯示的頁面是我的路線:

$route['default_controller'] = 'Home'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 
$route['Admin'] = 'Admin'; 
//$route['(:any)'] = 'Home/pages/$1'; 
$route['(:any)/(:any)'] = 'Home/pages/$1/$2'; 
//$route['(:any)/(:any)'] = 'Home/pages/$1'; 

現在上面的路線有兩個問題:

  1. 讓我們假設我有兩個層次URL,這樣的路線$路線[」 (:any)/(:any)'] ='Home/pages/$ 1/$ 2';將被調用現在的頁面控制器接受一個名稱,並在我的情況下顯示的頁面,它總是返回名字,或者你可以說1美元,而我希望URL中的姓氏被髮送到控制器。
  2. 我們怎樣才能使它通用?就像我可以在URL中使用斜槓分隔n級別的名稱,如何配置我的路由以接受所有URL並將URL的姓氏傳遞給控制器​​。因爲目前它顯示的頁面沒有找到,如果我有一個在路由中定義的其他級別的URL!

回答

1

如果你正在使用CI 3,你可以使用regular expressions

的application/config/routes.php文件

//http://localhost/occ/level1/level2/....leveln 
$route['(.+)'] = function ($param) { 
        $params = implode(",", explode('/', $param)); 

        if($params[0] === 'Admin'){ 
         $return = 'Admin/'; 
        } 
        else{ 
         $return = 'Home/pages/'; 
        } 

        return $return . $params; 
       } 

的application/config/Home.php

public function pages ($params) { 
    $str = explode(',', $params); 

    //now you can manipulate all params 
    $str[0];//param_1 
    $str[1];//param_2 
    $str[n];//param_n 
} 
+0

是我我正在使用CI 3.X,我收到無效參數傳遞implode() –

+0

改變這個'$ params = implode(「,」,$ param);'to'$ params =(count($ param )> 1)? implode(「,」,$ param):$ params;' – elddenmedio

+0

爆炸字符串我只返回一個屬性不是兩個,三個...... n –