Kohana を学んで以来、私のプログラミング経験は大幅に改善されました。なぜなら、Kohana を学ぶ前は、自分の URL がどのように構築されているかについて少しも考えたことがなかったからです。MVC の世界では、Pretty URL を使用すると、自分が何をしたいのか、どのようにそれを実行するのかを本当に考えさせられます。
上記の例であなたが何をしたいのかを見ると、私の意見では、あなたは後ろ向きに考えているように思えます。あなたが好む URL は /about /about/internal /about/external /about/improvement /about/improvement/stat だとおっしゃいました
「約」は実際にはアクションであり、コントローラーではないように思えます。「/about/」という URL は、私が何についての情報を取得しているかを示していないため、かなり紛らわしいですが、おそらくサイト全般に関するものなので、スライドさせておいて構いません。「/about/internal」はかなり明確ですが、多くの点で、適切な英語で読めるように URL を記述しようとしています。実際には、/about、/internal/about、/external/about、/improvement/about、/improvement_stat/about のように記述します。
おそらくコントローラーをテンプレートコントローラーとして設定していて、それぞれに対してそれを行う必要があると思わない限り、複数のコントローラーを使用することに抵抗している理由がわかりません。あなたはそうしない。一般に、テンプレート コントローラーである「ページ」という名前のコントローラーを作成します。次に、他のすべてのコントローラーがページ コントローラーを拡張します。ページ コントローラーを拡張するすべてのコントローラーで使用できる定数やその他の変数をページ コントローラーで定義できます。
しかし、本当に複数のコントローラーを書くことに抵抗がある場合は、必要なコントローラーとアクションに到達できる特定のルートをいつでも書くことができます。たとえば、最大 4 つの ID をルートに渡す比較にルートを使用しました。そのルートを次のように書きました。
Route::set('thing_compare', 'thing/compare/<thing1>/<thing2>(/<thing3>(/<thing4>))')
->defaults(array(
'controller' => 'thing',
'action' => 'compare'
));
thing3 と thing4 は括弧で囲まれていることに注意してください。これはオプションであることを意味します。次に、コントローラーで次のようにしてこれらの値を取得できます。
$thing1 = $this->request->param('thing1');
しかし、あなたが与えた例に戻って、次のようなルートを書くだけです(コントローラーの名前が「about」であると仮定します:
Route::set('about_internal', 'about/internal')
->defaults(array(
'controller' => 'about',
'action' => 'about_internal'
));
Route::set('about_external', 'about/external')
->defaults(array(
'controller' => 'about',
'action' => 'about_external'
))
個人的には、このようなルートを設定することは避け、賢明な設計戦略を作成するために URL をどのように設定する必要があるかを本当に再考します。