レガシー アプリケーションを Symfony2 に移植していますが、ルーティングにクエリ文字列パラメーターが含まれていないため苦労しています。いくつかの簡単な例: 基準に基づいて結果をフィルタリングできる書籍の検索ページがあるとします。
http://www.bookstore.com/books?author=Stephen+King&maxPrice=20
このような場合のクエリ文字列パラメーターの利点は、任意の数のフィルターを使用でき、特定の要求に必要なフィルターを使用でき、使用していないフィルターで URL を混雑させないことです。
Symfony2 ルーティング コンポーネントを使用して、上記のクエリのルーティングを書き直したとしましょう。次のようになります。
http://www.mybookstore.com/book/any_title/stephen%20king/any_release_date/max_price_20/any_min_price/any_format/any_category
そのルートの各「セグメント」はキーと値のペアではなく、単なる値 (例: author=Stephen+King
> /stephen%20king/
) であるため、その URL がどれだけ長いかを考慮しなくても、それほど直感的ではないと思います。
もちろん、リクエスト オブジェクトをアクション メソッドに渡すことで、コントローラーのクエリ文字列パラメーターにアクセスできますが (例: indexAction(Request $request) {
)、それらを検証して、アプリケーションの他の部分 (つまり、現在自分がいる場所) に渡すのは面倒です。.current
Knp Menu Bundle を使用してサイドバーを作成していて、クエリ文字列パラメーターに基づいてパーツをマークしたい場合はどうすればよいでしょうか? そのための機能はなく、Symfony2 ルートと統合するための機能のみです。
また、クエリ文字列パラメーターが受け入れられることを検証する方法は? 私は現在、それらをフォームのように検証してから、データベースに渡してクエリを生成することを検討しています。たぶん、これは Symfony2 チームがそれらを処理することを想定した方法でしょうか? もしそうなら、私は本当に理由を知りたいです。アプリケーションと戦っているような気がします。