【问题标题】:Symfony 3.4 : Filter/validate GET parametersSymfony 3.4:过滤/验证 GET 参数
【发布时间】:2019-01-21 19:25:56
【问题描述】:

我想在 symfony 控制器中过滤 GET 请求发送的数据。

例如,通过 $request->query->all() 将给定的数据作为数组,我想过滤键以仅保留我需要的键和具有良好类型的键。

最终,我想将有效数据作为默认数据传递给表单构建器 createFormBuilder($my_valid_data) 但它必须正确,因为传递错误的类型(即二维数组而不是数组会导致崩溃)。

Symfony 提供这样的功能吗?

谢谢。

注意:filter_var_array + array_filter 不够好,因为当我需要单维时它会允许多维。

【问题讨论】:

    标签: php symfony filtering http-get symfony-3.4


    【解决方案1】:

    我认为您的方法是错误的,但您没有提供太多信息。 如果数据有效,您可能不需要将其传递给表单(即表单的用途)。您想将原始请求传递给实际表单,然后只获取您想要的值并丢弃其余的值。

    您基本上可以通过创建一个接受所需值的表单并使用allow_extra_fields 来做到这一点,这样您就可以丢弃其余的。这样你就可以对你所追求的字段进行验证。

    编辑:如果您想根据对页面的请求为表单设置一些值,您可以在调用createView 并将表单传递给模板之前使用events 甚至使用$form->setData()

    【讨论】:

    • 可能我当时解释错了,我的表单是作为 POST 提交的,但我想使用 GET 参数用默认值填充它。但也许我有一个错误的方法。那么有什么好的方法吗? (更不用说,我不在 POST 和 GET 之间使用相同的字段名称,因为 FormBuilder 会用 form[] 为它们“添加前缀”)
    • 你想给url传参数,所以当你加载表单时,你在表单上预定义了默认值?
    • 是的,就像mywebsite.com/page?smth=4会在表单(form[smth])中将smth的默认值设置为4。
    • 再次,您应该发布您的代码,以便从一开始就更容易理解所有这些。请参阅我编辑的答案。