我在问什么是使用 Symfony2 进行过滤的最佳策略。
我想过滤一个实体表(酒店)。这个过滤器应该允许我:
- 选择有或没有电子邮件、有或没有网站等的酒店。
- 根据州和/或城市选择酒店(关系 OneToMany)
- 用复选框选择我想在桌子上显示的信息(例如在酒店桌子上显示“电子邮件地址”,但不显示“电话”或“网站”)。
首先,我想在 HotelController 上构建过滤器表单。提交过滤器后,我为每个发送的 $_POST 提供一个 FlashBag,重定向到同一页面,如果有 FlashBag,我将 cookie 发送到 $reponse。然后我显示使用 cookie 上的数据过滤的表格。
但我不太喜欢这样,因为我在 HotelController 上有一个非常大的 indexAction(),而且我认为将 $_POST 更改为 FlasBag 为 Cookie 并不是很干净,是吗?我做这个重定向,因为刷新页面,数据不会再次发布。
我也在问一个问题,为了防止 IndexAction() 方法太大,我可以将一些代码放到另一个方法中吗,例如方法 PostToFlashBag() 和另一个 FlashBagToCookie(),或者 Controller 上的每个方法都必须以单词“Action”并且必须可以通过路由器访问?
然后,我想到另一件事:有一个实体“过滤器”,我需要的每一行。例如“WithEmail”、“DisplayTel”等。然后我可以轻松地构建一个 FilterType,并更新过滤器实体,以重定向到同一页面(同样,如果用户刷新页面,防止重新发布数据)。最后,我可以使用 HotelRepository 上的方法显示带有对象过滤器的表。
这看起来不错,但我有点担心,因为过滤器实体只有一个条目,我必须找到过滤器(1)。由于 MVC,只有一个条目的模型是否正确?
你会选择什么策略(也许是另一种策略)?我很高兴学习 MVC 和 Symfony2 devloppemnt 的良好实践。