私は、既存の大きなリンクカタログを使用して既存のWebサイトを書き直すという任務を負っています。議論のために、リンクカタログを変更するようなことは何もできないと仮定しましょう。使用しているリンク構造の例を次に示します。
アイテムページは次のようになります。
www.domain.com/widgets/some-totally-awesome-large-purple-widget
カテゴリサブページページは次のようになります。
www.domain.com/widgets/purple-widgets
カテゴリの親ページページは次のようになります。
www.domain.com/widgets/
カスタムページは次のようになります。
www.domain.com/some-random-page
さまざまなページタイプが多すぎて、個々のルーターを作成できません。
Router :: connectを使用すると、次のようなものを使用して、最初と2番目のシナリオを簡単に説明できます。
Router::connect('/{:pageroot}/{:pagekey}', 'Pages::index');
次に、Pages :: indexメソッドは、「/ widgets/purple-widgets」の「キー」を持つデータベース内のエントリを検索します。
ただし、フレームワークは、3番目や4番目のようなページのデフォルトで「/ {:controller} / {:action} / {:args}」ルートになります。これがフレームワークの正しい動作であることを私は知っています。また、ベストプラクティスでは、この動作に一致するようにサイトを作成する必要があると述べています。しかし、それはここではオプションではありません。
私が必要としているのは、3番目と4番目の例が最初の例と同じように機能できるようにするルーターです。すべての例はPages::indexコントローラーに送信する必要があります。このコントローラーは、URLパスをキーとして使用してデータベースにクエリを実行します。