Symfony2 でフィルタリングするための最良の戦略は何かを尋ねています。
エンティティ (ホテル) のテーブルをフィルター処理したい。このフィルターにより、次のことが可能になります。
- メールの有無、ウェブサイトの有無などのホテルを選択します。
- 州および/または都市に基づいてホテルを選択する (リレーション OneToMany)
- テーブルに表示する情報をチェックボックスで選択します (たとえば、ホテルのテーブルに「メール アドレス」を表示しますが、「電話」や「ウェブ サイト」は表示しません)。
まず、HotelController にフィルター フォームを作成することを考えます。フィルターが送信されると、送信される $_POST ごとに FlashBag があり、同じページにリダイレクトされます。FlashBag がある場合は、Cookie を $reponse に送信します。次に、Cookie にあるデータでフィルター処理されたテーブルを表示します。
しかし、私はこれがあまり好きではありません。なぜなら、私は HotelController に非常に大きな indexAction() を持っていたからです。$_POST を FlasBag から Cookie に変更するのはあまりきれいではないと思いますか? このリダイレクトを行います。ページを更新すると、データが再度投稿されなくなります。
また、あまりにも大きな IndexAction() メソッドを防ぐために、メソッド PostToFlashBag() と別の FlashBagToCookie() などのコードを別のメソッドに配置できますか、または Controller のすべてのメソッドはで終了する必要がありますか? 「アクション」という単語と、ルーターでアクセスできる必要がありますか?
次に、別のことを考えます。必要なすべての行で、エンティティ「フィルター」がありました。たとえば、「WithEmail」、「DisplayTel」などです。次に、FilterType を簡単に作成し、Filter エンティティを更新して、同じページにリダイレクトできます (ユーザーがページを更新した場合にデータが再投稿されるのを防ぐため)。最後に、HotelRepository のメソッドを使用して、オブジェクト Filter を使用してテーブルを表示できます。
これは素晴らしいことのように思えますが、フィルター エンティティには 1 つのエントリしかなく、Filter(1) を見つける必要があるため、少し心配です。MVC のため、エントリが 1 つしかないモデルを持つことは正しいですか?
どの戦略を選択しますか (おそらく別の戦略) ? MVC と Symfony2 devloppemnt の優れた実践方法を学ぶのは興味深いことです。