1

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 の優れた実践方法を学ぶのは興味深いことです。

4

1 に答える 1

2

Filterユーザーが入力した値を受け取る専用のモデル クラス (それと呼びましょう) を持つことは、間違いなく進むべき道です。

withEmailさらに、この入力に Symfony2 フォームを使用すると、検証が可能になり、が本当にブール値などであることを確認できます。あなたからFilter、SQL/Doctrine クエリを作成し、コントローラーが返さなければならないものを返します。ビュー、または生データ。

controller には、任意のメソッドを含めることができます。結局のところ、Symfony2 のコントローラーは単純な古い PHP オブジェクトです。実装するだけContainerAwareInterfaceです。通常、それらは を継承しますが、この継承はやControllerなどのいくつかのプロキシ メソッドのみをもたらします。getDoctrinerender

唯一の規則は、ルートとして使用されるメソッドは次で終わらなければならないということですAction

于 2013-01-22T10:40:56.670 に答える