【问题标题】:How to handle a form from another controller in Symfony2?如何在 Symfony2 中处理来自另一个控制器的表单?
【发布时间】:2014-03-28 13:03:59
【问题描述】:

我有 2 个独立的控制器 Controller1:somethingActionController2:processForm

somethingAction 中,我创建了一个表单并将其操作(url)设置为processForm 的url。当somethingAction的视图中的表单被提交时,POST数据转到processForm

processForm 中,我创建了相同的表单,对其进行验证和处理。一切都很好,除非表格无效。因为为了显示错误以及用户输入的数据,您需要渲染与somethingAction 完全相同的视图。

如果不复制代码(流程表单部分),我无法重用这样的表单,即使是 3-4 行,我也希望拥有这种功能。

有简单的方法吗?没有 AJAX。我错过了什么吗?

如果嵌入的控制器可以重定向就可以做到。

【问题讨论】:

    标签: php forms validation symfony


    【解决方案1】:

    两件事可能会有所帮助:

    1) 向下滚动到文档中的“创建表单类”,了解如何避免重复表单:

    http://symfony.com/doc/current/book/forms.html#creating-form-classes

    2) 一种常见的模式(在许多情况下我会说更好)是发布到最初生成表单的同一个控制器操作。也就是说,Controller1:somethingAction POST 到 Controller1:somethingAction。然后,您需要一些逻辑(基本上是一个 IF 语句)来检测表单何时提交并处理表单或显示错误。在伪代码中它可能看起来像:

    function somethingAction()
        if form.isValid()
            process form
            redirect or render a success screen
        else
            render form (with or without errors)
    

    【讨论】:

    • 感谢您的意见。我的表单是与实体相关联的类。我没有复制任何形式。这是被复制的过程部分代码。
    • 别担心,从你的问题中不太确定。忽略(1),尝试(2)。无论如何对我有用。如果有帮助,我可以输入一些实际的 PHP 代码。
    • 没有汗水。我相信我所拥有的正是(2)。创建表单,如果请求方法是 POST 则处理表单,然后创建视图。如果您不打算在超过 1 个地方使用该表单,它会产生奇迹。
    • 如果您的流程逻辑超过几行,您可能希望将其写到一个单独的类中,您可以在每次需要处理时指向该代码。您甚至可以将其设置为服务。或者在 PHP 5.4 中一个快速 + 愉快的方式可能是创建一个 trait 您可以使用每个控制器 use
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多