【问题标题】:How to extend sfWidgetFormDoctrineChoice into a tabbed widget如何将 sfWidgetFormDoctrineChoice 扩展为选项卡式小部件
【发布时间】:2013-01-10 11:38:25
【问题描述】:

我在 Symfony 1.4 中有一个 Doctrine 表单。

我需要做什么:

我需要通过 sfWidgetFormDoctrineChoice 对象显示当前提供的相同选项,但我想在选项卡式视图中显示它们。

我当前的视图如下:

[ ] option1
[ ] option2
[ ] option1.1
[ ] option1.2
[ ] option1.3
[ ] option2.1
[ ] option2.2
[ ] option2.3
[ ] option2.4

我想像这样向他们展示:

+-------------+-------------+
| > option1 < |   option2   |   (tabs, option1 is the currently selected one)
+-------------+-------------+--------------------------+
 [ ] option1.1      (options on first tab)
 [ ] option1.2
 [ ] option1.3
+------------------------------------------------------+

使用parent 属性关联选项。
顶行的那些将无法检查,它们的parent 将是NULL。 如果我知道如何扩展类,我的意思是,重新定义哪些方法,我想我可以自己解决这个问题。

我一直在尝试的:

这是小部件的类继承:

sfWidgetFormDoctrineChoice sfWidgetFormChoice sfWidgetFormChoiceBase sfWidgetForm sfWidget

这是表单的类继承:

ProductForm BaseProductForm BaseFormDoctrine sfFormDoctrine sfFormObject

这就是小部件在视图上打印的方式:

<?php echo $form['product_type_list'] ?>

问题是,在最后一行中,我认为我会在表单类上找到一些神奇的 __get() 方法,并且(可能)在小部件类上找到一个 __toString() 方法,但我没有找到它们,我'我仍然不确定如何在 Symfony 1.4 和 Doctrine 中扩展小部件。

谁能指出我正确的方向?

【问题讨论】:

    标签: php forms doctrine symfony-1.4


    【解决方案1】:

    我认为你有两种可能解决这个问题:

    首先是编写您自己的小部件,它继承自sfWidgetFormDoctrineChoice。因此,您可以根据自己的要求实现自定义 __toString() 方法。 (见documentation

    你应该看看sfWidgetFormChoice 和目标方法self sfWidgetFormDoctrineChoice。如果您编写自己的类继承自sfWidgetFormDoctrineChoice,您可以覆盖方法rendergetJavaScripts。此外,您可以为这个小部件实现自己的渲染器,它可以制作 js 选项卡和 gui 的东西。

    第二个选项是,您隐藏默认表单字段并使用 javascript 构建新的表示。你想建标签,所以你应该已经使用js来启用它了?!

    【讨论】:

    • 我已经按照您的第二个建议所说的那样做了,但这次我想以正确、可重复使用的方式来做。我仍然不知道如何扩展小部件。您指向的文档页面是“sfFormFieldSchema”,它是另一个类树,我不知道它的存在。 :-S
    • 嗯,没错!你应该看看sfWidgetFormChoice 和目标方法self sfWidgetFormDoctrineChoice。如果您编写自己的类继承自sfWidgetFormDoctrineChoice,您可以覆盖方法rendergetJavaScripts。此外,您可以为这个小部件实现自己的渲染器,它可以制作 js 选项卡和 gui 的东西。
    • 我只是将最后一条(内容丰富的)评论复制到答案本身中,以便将其作为一个整体来接受。谢谢!
    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多