【问题标题】:Best practice for handling add/edit/delete forms处理添加/编辑/删除表单的最佳实践
【发布时间】:2012-02-15 22:27:47
【问题描述】:

我对如何在我的 zend 应用程序中处理表单有点困惑。现在我正在为我需要的每个对象为 addAction() 和 editAction() 创建两个单独的表单。我的删除公式总是一样的,我只是更改了一些属性。

我想知道的是:这里的最佳实践是什么?

我个人认为最好使用“Object1,Object2”之类的表单,而不是“Object1Add,”Object1Edit,Object2Add,Object2Edit”

我问的原因是因为我显然需要两种不同的形式。有些元素根本不会改变,所以我不希望用户看到它们。

方法可以是控制器editAction()中的$form->removeElement('X')

我为什么会这样想? 非常简单的错误 - 我可能会在此处添加一个字段并在第二种形式中忘记它,或者在一种形式中显示带有标签“disabled=0”的字段,但在另一种形式中没有该查询。

希望我让自己足够清楚:) 提前谢谢!

【问题讨论】:

    标签: forms zend-framework


    【解决方案1】:

    我假设您确实扩展了表单类。我会将名为 editadd 的函数添加到执行相应逻辑的类中。这样,您可以将表单逻辑保留在表单中,而不是在控制器中。

    【讨论】:

    • 是的,我扩展 Zend_Form 并基本上在 init() 中分配所有东西 - 所以我会在控制器中执行 edit() 和那些 $this->removeElement('x') 之类的功能然后调用类然后 $this->view->form = $form->edit() ?这听起来像是我非常喜欢的一种方式,谢谢!
    • 完全正确 - 但是请注意您首先调用 editadd 之后(或相反)的情况 - 您可以轻松地通过这种方式释放元素。另一种方法是为构造函数提供一个参数来指示模式(之后无法更改)。
    【解决方案2】:

    这是使用工厂设计模式的最佳时机。不要使用构造函数创建表单,而是使用工厂方法。这是一个快速的伪代码布局:

    static createAdd()
      form = new self()
      call form->initCommon
      call form->initAdd
      return form
    
    static createEdit()
      form = new self()
      call form->initCommon
      call form->initEdit
      return form
    
    initComon()
      add the common+validators elements
    
    initAdd()
      add the elements+validators only used in Add
    
    initEdit()
      add the elements+validators only used in Edit
    

    有道理吗?

    【讨论】:

    • 这很有意义。很高兴知道这个“问题”的模式。感谢您的提示。
    【解决方案3】:

    我会完全按照你说的做:1 个包含所有元素的表单。然后视情况而定,只需在表单上使用removeElement 方法即可删除不需要的元素。

    【讨论】:

    • 到目前为止,谢谢,有点猜到这是要走的路,我只是把自己弄糊涂了,就像“为什么要建造一些你事后切成碎片的东西”..如果没有其他答案出现,我会接受你的; )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多