前の質問からの続き:カスタム リチウム ルーティング シナリオ
注: これはLithium フレームワークに固有のものです。
問題
ページ、アイテム、およびカテゴリを区別する規則がまったくない URL スキームを継承しました。これで、キャッチオール コントローラーに渡される非常に一般的なルーターができました。
このキャッチオール コントローラー (PagesController) は、url をキーとして使用して、データベースからページ タイプを取得します。次に、PagesController はメソッドを実行し、ページ タイプに基づいてテンプレートを選択します。この情報は無期限に Memcached に保存されるため、検索は非常に高速です。
しかし、より多くのページ タイプが登場するにつれて、このコントローラーが肥大化しすぎて柔軟性がなくなることがわかります。理想的には、さまざまなページ タイプを独自のコントローラーに分割したいと考えています。
ソリューション?
データベースをチェックして正しいコントローラを決定するルーティング シナリオを作成することは可能でしょうか?
私が最初に考えたのは、 andlithium\net\http\Router
でカスタム ロジックをサブクラス化して使用することです。Router::connect()
Router::_parseController()
lithium\net\http\Route
bootstrap\routes.php でデータベースにクエリを実行し、結果に基づいて新しいオブジェクトを作成できるとよいでしょう。次に、これを に渡すだけRouter::connect()
です。これはひどいハックのようです。
いずれにせよ、Router::connect()
そのデザインはそれほど動的であることを意図していません。