【问题标题】:Symfony2 and filter, right strategySymfony2 和过滤器,正确的策略
【发布时间】:2013-01-22 10:15:12
【问题描述】:

我在问什么是使用 Symfony2 进行过滤的最佳策略。

我想过滤一个实体表(酒店)。这个过滤器应该允许我:

  • 选择有或没有电子邮件、有或没有网站等的酒店。
  • 根据州和/或城市选择酒店(关系 OneToMany)
  • 用复选框选择我想在桌子上显示的信息(例如在酒店桌子上显示“电子邮件地址”,但不显示“电话”或“网站”)。

首先我想在 HotelController 上构建过滤器表单。提交过滤器后,我为每个发送的 $_POST 提供一个 FlashBag,重定向到同一页面,如果有 FlashBag,我将 cookie 发送到 $reponse。然后我显示使用 cookie 上的数据过滤的表格。

但我不太喜欢这个,因为我在 HotelController 上有一个非常大的 indexAction(),而且我认为将 $_POST 更改为 FlasBag 到 Cookie 并不是很干净,是吗?我做这个重定向,因为刷新页面,数据不会再次发布。

我也在问一个问题,为了防止 IndexAction() 方法太大,我可以把一些代码放到另一个方法中,例如一个方法 PostToFlashBag() 和另一个 FlashBagToCookie(), 或者控制器上的每个方法都必须以单词“Action”结尾,并且必须可以通过路由器访问

然后,我想到另一件事:有一个实体“过滤器”,我需要的每一行。例如“WithEmail”、“DisplayTel”等。然后我可以轻松地构建一个 FilterType,并更新过滤器实体,以重定向到同一页面(同样,如果用户刷新页面,防止重新发布数据)。最后,我可以使用 HotelRepository 上的方法显示带有对象过滤器的表。

这看起来不错,但我有点担心,因为过滤器实体只有一个条目,我必须找到过滤器(1)。 由于 MVC,模型只有一个条目是否正确

你会选择什么策略(也许是另一种)?我很高兴学习 MVC 和 Symfony2 devloppemnt 的良好实践。

【问题讨论】:

    标签: model-view-controller symfony filter


    【解决方案1】:

    拥有一个专门的模型类 - 我们称之为Filter - 它将接收用户输入的值,这绝对是要走的路。

    此外,在此输入上使用 Symfony2 表单,这样您就可以进行验证,并确保 withEmail 是真正的布尔值等。从您 Filter 开始,构建您的 SQL/Doctrine 查询并返回什么您的控制器必须返回,无论是视图还是原始数据。

    您可以在控制器中使用任何您想要的方法。毕竟,Symfony2 中的控制器是普通的旧 PHP 对象。他们只需要实现ContainerAwareInterface。通常它们继承Controller,但是这种继承只带来了一些代理方法,比如getDoctrinerender

    唯一的约定是用作路由的方法必须以Action结尾

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2011-05-17
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多