如何在Symfony中使表单模块化?

乔恩德

我在一个页面中有10个表单(它们在选项卡式页面中)。

我的控制器功能非常强大,为了使表格模块化,我打算只显示控制器功能中的表格,然后对其相应的控制器进行POST。

这10种形式中的某些形式在其他页面中使用,因此通过更改操作URL,可以更轻松地在单独的控制器中管理它们。

但是,我该如何显示表格错误并防止表格无效(如果无效)呢?

如果嵌入式控制器可以重定向,则可以实现此目的。我是否缺少其他选择?

Symfony2必须有一个理由不允许在嵌入式控制器中进行重定向,但是我想知道为什么。

第三编辑:

实际形式的图片:http : //imgur.com/sIx3sgs,tnZkvqM,ZAP950s,hk45oTW#0

  1. 图1:Step1(只能创建一次)
  2. 图2:Step5(可以多次创建)您可以看到创建表单和编辑表单
  3. 图3:Step5 ui表单被向上滑动。
  4. 图片4:Step6与Step1相同

不需要按顺序排列这些表格,用户可以创建并保存step6,而无需创建step1。

第二编辑:

这不是一个多步骤表单。为了方便起见Step1我将它们命名为Step2,等等。

编辑:

这就是我所拥有的:

class DefaultController extends Controller{
    public function processAction(){
        $request = $this->getRequest();
        /*** FORM 1 ****/
        $entity  = new Step1();
        $form1   = $this->createForm(new Step1Type(), $entity);
        if ($request->getMethod() == 'POST'){
            $form1->bindRequest($request);
            if($form1->isValid()){
                return $this->redirect($this->generateUrl('some_link'));
            }
        }
        /***/
        //Do the same for other forms

        return array(
            'form1'   => $form1->createView()
            //[...to form10]
        );
    }
}

这就是我想要的:(我将使用嵌入式控制器来执行此操作,但是您无法重定向)

class DefaultController extends Controller{
    public function processAction(){
        $request = $this->getRequest();
        /*** FORM 1 ****/
        $entity  = new Step1();
        $form1   = $this->createForm(new Step1Type(), $entity);
        //change $form1 action url to point to Step1Controller->createAction()
        /***/
        //Do the same for other forms

        return array(
            'form1'   => $form1->createView()
            //[...to form10]
        );
    }
}
class Step1Controller extends Controller{
    public function createAction(){
        $request = $this->getRequest();

        $entity  = new Step1();
        $form   = $this->createForm(new Step1Type(), $entity);

        $form->bindRequest($request);
        if($form->isValid()){
            //save entity
            return $this->redirect($this->generateUrl($getRedirectLinkFromForm));
        }
        return $this->redirect($this->generateUrl('some_other_link')); 
    }
}
乔恩德

我提出了我可以想到的4种解决方案,从最佳到最坏的顺序依次为:

  1. AJAX
  2. 嵌入式控制器中无重定向
  3. 如果表单无效,则保存在会话中发布的数据/表单错误
  4. 修改Symfony2内部,以允许从嵌入式控制器重定向

AJAX

实际上,这是最好的选择,因为它减少了整个页面的请求,并且是高度模块化的。

您将渲染所有10个嵌入式控制器,但是每个Submit按钮将执行指向对应控制器的ajax发布,该ajax发布将仅处理对应表单,并且将仅返回该特定表单的视图。

而且您不需要花哨的JavaScript,因为只需在单击Submit时进行AJAX调用,并将响应加载到表单所在的div。


嵌入式控制器中无重定向

问题是如果用户按下F5,它将重新发送POST数据。


如果表单无效,则保存在会话中发布的数据/表单错误

修改Symfony2内部,以允许从嵌入式控制器重定向

这两个选项不太理想,因为这会增加复杂性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Typescript模块化项目中使用cropper.js?

来自分类Dev

如何在Bootstrap中使用Laravel表单模型绑定?

来自分类Dev

如何在Bootstrap中使用Laravel表单模型绑定?

来自分类Dev

如何在Node JS中模块化代码

来自分类Dev

如何在Angular中模块化polyfill?

来自分类Dev

如何在Shiny中模块化动态ggvis图表?

来自分类Dev

如何在模块化设计模式中嵌套功能?

来自分类Dev

如何在导出的函数中对导出模块化

来自分类Dev

如何在Angular中模块化polyfill?

来自分类Dev

如何在Django中模块化模板?

来自分类Dev

如何在PHP中模块化类方法?

来自分类Dev

如何在索引上使用模块化算术?

来自分类Dev

如何在模块化设计模式中嵌套功能?

来自分类Dev

基于模块化CMS的动态菜单模块的最佳实践

来自分类Dev

PHP Symfony:如何在表单模板中访问getter-Constraint?

来自分类Dev

PHP Symfony:如何在表单模板中访问getter-Constraint?

来自分类Dev

没有溢出的C ++中的简单模块化幂运算?

来自分类Dev

没有溢出的C ++中的简单模块化幂运算?

来自分类Dev

如何在 NetBeans 模块化项目中重命名模块?

来自分类Dev

如何在flutter中使用下拉选择创建表单模式

来自分类Dev

如何模块化Powershell脚本

来自分类Dev

如何构建模块化应用

来自分类Dev

如何模块化角度代码?

来自分类Dev

如何构建模块化应用

来自分类Dev

如何使Java应用模块化

来自分类Dev

如何保持python项目模块化?

来自分类Dev

在Java中使模块模块化/可扩展

来自分类Dev

Symfony2 Forms-如何在表单构建器中使用参数化的构造函数

来自分类Dev

模块化如何在网络分析中提供帮助

Related 相关文章

热门标签

归档