2016-05-09 2 views
1

私は英語が得意ではないですので、私は可能な限り明確にしようとします:Yii2パス形式再帰URL

私はその再帰的なテーブルを持っているデータベースでは、高度なテンプレートを持っているYii2でプロジェクトを持っていますカテゴリとエントリのツリーを表していますが、無制限のドキュメントやフォルダ(別のフォルダ内のフォルダも可能です)を持つことができるフォルダツリーとして想像すると、この形式でURLを作成しました。

はlocalhost://私のプロジェクト/ルート・カテゴリー/サブ猫-A /サブ猫-B/25-文書

私必要カントー現在のURLの最後の部分を取得し、全体のためにURLは以下の形式でURLの最後の部分に位置しているエントリの前にNレベルを持つことができます。

<id:\d+>-<slug:[A-Za-z0-9-_.]+> 

しかし、私はこの問題を解決する可能性のあるURLルールを知りません。

あなたの回答をお礼します。

ありがとうございます。

答えて

1

私は自分でそれを解決し、私はあなたのいずれかがこの答えをどのように改善できるか解決するかどうかを言うつもりです:

私はcodemix/yii2-localeurls拡張子を使用しています、私は私がしなければならなかったことを意味このようparseRequest方法をcodemix \ localeurls \ UrlManagerクラスを拡張し、上書き:

public function parseRequest($request) { 
    $pathInfo = $request->getPathInfo(); 
    $matches  = 0; 
    $has_matches = preg_match('%(bussiness-lines|lineas-de-negocio)\/(.)+\/%', $pathInfo, $matches); 

    if ($has_matches) { 
     /* 
     * GET THE LAST SECTION FROM THE URL 
     */ 
     $explode_patInfo = explode('/', $pathInfo); 
     $tree_element = end($explode_patInfo); 

     /* 
     * SEPARATES THE ID AND THE SLUG FROM THE URL 
     */ 
     $tree_element_explode = explode('-', $tree_element); 
     $tree_element_id  = reset($tree_element_explode); 

     unset($tree_element_explode[0]); 

     $tree_element_slug = implode('-', $tree_element_explode); 

     /* 
     * RETURN THE CONTROLLER/ACTION AND ITS PARAMS TO PROCESS THE REQUEST 
     */ 
     if ($tree_element !== false) { 
      return [ 
       'site/get-tree-element', 
       [ 
        'id' => $tree_element_id, 
        'slug' => $tree_element_slug 
       ] 
      ]; 
     } 
    } 

    //IF THE REQUEST DOES NOT CORRESPOND TO MY CUSTOM URL RULE, LETS THE PARENT DO THE JOB 
    return parent::parseRequest($request); 
} 

を、私はそれを望んで、これは君たちのいずれかを助けることができる共有しています。

平和。