3

これがwww.example.com/class/function/ID/の形式と完全に一致しないことは知っていますが、ユーザーに表示したいものの方が理にかなっています。

これが私がやりたいことです:

www.example.com/project/id/item/item_id/

したがって、例は次のようになります。

www.example.com/project/5/item/198237/

そして、これは動作になります:

  • www.example.com/project/->これにより、プロジェクトのリストが表示されます(現在の実装)
  • www.example.com/project/5/->これにより、プロジェクト5(現在の実装)のアイテムのリストが表示されます。
  • www.example.com/project/5/item/->これは、上記の行と実際には何も違うことを意味するものではありません。(それは悪いですか?)
  • www.example.com/project/5/item/198237/->これにより、アイテム198237の詳細が表示されます。

したがって、各アイテムは1つのプロジェクトに直接関連付けられています。

これを行う方法を考える唯一の方法は、「プロジェクト」コントローラーを肥大化させ、さまざまなパラメーターを解析し、その「プロジェクト」コントローラーからのすべてのビューを制御することです。「アイテム」のモデルとビューは「プロジェクト」のモデルとビューから完全に分離されているため、これは行いたくありません。

他の唯一の解決策(私が現在実装していて、好まない)は、次のものを使用することです。

www.example.com/project/5/ www.example.com/item/198237/

「プロジェクト」コントローラーを肥大化させることなく、最初に示したように階層URLを構築する方法はありますか?

4

2 に答える 2

1

3 つのオプションがあり、どれだけ実用的かによって分類されています。

  • URI ルーティングを使用します。各 URL に対して特定のコントローラーとメソッドの組み合わせを使用する正規表現を定義します。

そのようなものがあなたを助けることができますroutes.php

$route['project/'] = 'project/viewall';
$route['project/(.+)'] = 'project/view/$1';
$route['project/(.+)/item/'] = 'project/view/$1';
$route['project/(.+)/item/(.+)'] = 'item/view/$2';

つまり、コントローラーがそれぞれアイテムとプロジェクトであると考えてください。$nまた、値は n 番目の括弧内に一致する部分に対応することに注意してください。

  • リダイレクトあり (またはなし) の同じコントローラーを使用します。あなたはすでにこれを検討したと思います。
  • ModRewriteApache サーバーなどの下位レベルでリダイレクトを使用します。のような規則を考え出すことができますroutes.php。すでにそのような方法を使用している場合、それを使用するのは悪い考えではありませんが、そのような方法を既に使用している場合に限ります。Apache の場合は、.htaccessファイルではなくサーバー構成で使用することをお勧めします。
于 2013-01-02T08:27:28.780 に答える
0

これらのオプションはすべて、routes.php (config フォルダーにあります) を使用して制御できます。のように、URI クラスを使用して任意の URI セグメントをキャッチすることもできます$this->uri->segment(2)。それは、URL ヘルパーがロードされている場合です。autoload.php ファイル (config フォルダーにもある) にデフォルトでロードできること。

于 2013-01-02T07:31:43.060 に答える