【问题标题】:How to filter in Symfony2?如何在 Symfony2 中过滤?
【发布时间】:2014-10-28 16:19:36
【问题描述】:

首先,我对 Symfony 2 非常陌生并开始学习。

是否有过滤值的可能性?也许过滤器链也是如此? 我从 Zend Framework 1 和 2 中知道这个概念。

例如:

  • 我有一个字符串“1A-N”
  • 现在我想过滤,以便只有数值通过;结果“1”

我必须在 Symfony 中自己实现这个吗?

我想做这样的事情:

$text = '1A - N';
$numberFilter = new NumberFilter();
$filteredText = $numberFilter->filter($text);
//now in $text i find '1'

但是现在我在 Symfony 中没有发现像这样让我很惊讶的东西。我认为它是一个全栈框架,这样的功能非常基础。

我发现了类似验证器的东西,但他们只说如果一个值,例如是否仅包含数字。还是 symfony 的验证概念就像它不仅说它是否是数字,而且还过滤掉所有其他 smybols?

【问题讨论】:

  • 我不确定我是否理解了这个问题:您是在寻找 Symfony 中已经存在的过滤器功能还是使用 Symfony创建过滤器功能的方法?在后一种情况下,您可以使用“服务”。你知道它是如何工作的吗?
  • 也许是数据转换器? symfony.com/doc/current/cookbook/form/data_transformers.html 和 @tomazahlin 一样,我认为不需要您描述的内容。也许您可以更具体地说明为什么需要过滤器或链接到 ZF2 文档?
  • @Blacksad;是的,我在 Symfony 中寻找现有的功能。 @Cerad:示例:用户输入“1 234”,我只需要我现在只评估 Symfony 的数字(邮政编码):-)

标签: symfony filter filtering


【解决方案1】:

具体取决于你想要什么:

  • 不允许用户输入不符合某些规则

    • 在表单中使用验证器
    • 在实体中使用断言
  • 修改用户输入以防万一

    • 在表单中使用视图转换器
    • 在表单中使用事件监听器
    • 为原则使用事件侦听器
  • 更改数据库中已存在的数据

    • 在树枝中使用过滤器
    • 创建要从命令行执行的命令

你也可以试试http://php.net/manual/ro/filter.filters.sanitize.php

【讨论】:

【解决方案2】:

我已经使用 Symfony 构建了相当大的应用程序,并且从来不需要这样的功能。无论如何,过滤器主要用于视图。 Symfony 带有 Twig,它有过滤器,可以链接,你可以编写自己的过滤器。但是如果您需要在后端使用过滤器进行一些后台处理,您可以按照您建议的方式完成。

我建议你写一个接口,使用工厂模式,所以如果你做很多过滤器,你就设置一个标准,这样链起来会更容易;)

【讨论】:

  • 肯定是接口;-),但是为什么工厂模式和这是哪一种抽象工厂或工厂方法不明白为什么?
  • 为什么是工厂?所以你可以这样做: $filteredText = $textHolder->setText('text')->filter('first)->filter('second')->getText();
  • 对不起,我不明白。 "$textHolder() = '文本';"语法错误;不起作用:-( "$textHolder->filter('first)->filter('second')->getText();" 是en.wikipedia.org/wiki/Fluent_interface 模式:-) 我想你想在filter() 方法,对吧?
  • 嘿,你可能已经看到了旧评论,我在写的时候有一些错别字。当然,Fluent 模式是基础,您将在其中返回 $this;使用工厂模式来区分各种过滤器。例如,当您调用 ->filter('first) 时,工厂类将返回 FirstFilter 的实例并处理文本,然后您可以应用另一个过滤器......等等,最后您通过 getText 获取文本()。
【解决方案3】:

在回答和搜索之后,我得出了以下结论。 Symphony 2 中暂时没有这个概念。 你必须自己写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多