【问题标题】:Zend Framework: Handling of multiple database records in one form as checkboxesZend Framework:以一种形式处理多个数据库记录作为复选框
【发布时间】:2010-02-18 20:15:23
【问题描述】:

我是 zend 框架的新手,但我已经成功地迈出了第一步。 到目前为止,我已经创建了一些 Zend_Forms,它们映射了我的模型的单个记录 到表单域。我已经为每种情况处理了带有表单类的表单。 到目前为止,这一切都很好。

现在我遇到了必须为产品指定功能的情况。功能和产品是我的应用程序的一部分。特征存储在我的数据库中的三个表中。 对于每个特征,在第三张表中都有一条记录

  • 首先是保存功能组名称的功能组。每个功能都应该分配到一个功能组。

  • 第二个表是特征表。此表具有功能组的外键和功能名称。

  • 第三张表是某种多对多关系,将功能与产品联系起来。此表有一个附加字段,其中包含产品这一独特功能的可选值(在两个外键旁边)。

例如:如果产品的重量为 4,78 kg,则值“4,78”存储在第三个表中,标签“重量为 %s kg”存储在第二个表中。特征组可能是“物理属性”之类的东西,保存在第一个表中。

长话短说: 我的问题是如何处理我必须以一种形式创建和编辑多个数据库记录的情况。 计划是为每个功能提供一个带有多个复选框的表单,从而按主题对功能进行分组。每个复选框都应该有一个额外的文本字段来输入可选值。

【问题讨论】:

    标签: php zend-framework checkbox zend-form checkboxlist


    【解决方案1】:

    您可以创建一个扩展 Zend_Form 的自定义表单类并将其用于您的类。 它可以接收模型的构造实例并基于该模型构造表单输入。 在您的控制器中进行表单验证后,您可以执行

    $values = $form->getValues();
    

    并使用该数组再次填充您的模型

    【讨论】:

      【解决方案2】:

      您可以尝试在表单类中创建子表单(Zend_Form_SubForm)。这可以分隔不同表的字段。对于版本,在您的控制器中,当您从树表中提取所有数据时,您可以填充与表对应的子表单。

      【讨论】:

      • 也许子表单是解决这个问题的正确方法。但是如何从二维数组创建子表单结构?
      【解决方案3】:

      你可以尝试扩展 Zend_Form 来创建你自己的元素。

      您将能够编写一个连接到 DB 以获取属性(功能和产品)的类。

      假设您编写了My_Form_Element_FeaturesMy_Form_Element_Products 类,您可以使用$features = new My_Form_Features();,然后使用getValues()populate() 等基类方法。

      你可以看看那里开始:

      --

      要回复您的评论,您可以使用:

      Zend_Form::setElementsBelongTo($array):
      

      更多信息请访问Zend_Form Advanced manual page

      【讨论】:

      • 我已将表单类连接到 db。但目前我不确定如何从我从数据库中获得的数组构建表单。我用子表单尝试过,但我无法获得像 productfeature[groupid][featureid][fieldname] 这样的字段名称 ...
      • 感谢有关 Zend_Form::setElementsBelongTo($array); 的提示。但是手册没有描述如何使用这个方法。你知道一个很好的教程吗?提前致谢。
      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2019-01-16
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      相关资源
      最近更新 更多