2017-10-18 3 views
0

私は完全に動的で、バックエンドからすべてのページを動的に作成するウェブサイトを持っています。 は今、私が作成しているあなたのURLのシーケンスを示してみましょう:URLのnレベルを受け入れるためにCIのルートを設定する

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

基本的にLEVEL1LEVEL2、... leveln は、特定のメニューなど家のレベル(階層)されています/ contact_section/contact_us管理者は複数のページを作成し、彼が望むようなレベルのメニューを作成することができます。つまり、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'; 

今、上記のルートは、2つの問題があります。

  1. のは、私は2つのレベルがありURLを持っているとしましょうので、ルート$ルート[」 (:any)/(:any) '] ='ホーム/ページ/ $ 1/$ 2 ';が呼び出されると、ページコントローラは名前を受け取り、私の場合は最初の名前を返すか、$ 1と言うことができますが、URLの最後の名前をコントローラに送る必要があります。
  2. どのように一般的にすることができますか?同様に、URLにnレベルの名前を付けてスラッシュで区切って、URLの姓をコントローラに渡してすべてのURLを受け入れるように経路を設定する方法を説明します。現在、ルートに定義されている他のレベルのURLを持っていると、ページが見つかりません!

答えて

1

あなたは、私がそうregular expressions

などのアプリケーション/設定/ 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; 
       } 

アプリケーション/設定/ 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を使用している場合、 CI 3.Xを使用していますが、無効な引数を受け取りましたimplap() –

+0

この '$ params = implode("、 "$ param);'を '$ params =(count($ param) )> 1)? $ params = implode( "、" $ param):$ params; ' – elddenmedio

+0

文字列を爆発させています.1つではなく2つの属性が返されています..... n –

関連する問題