如何将sfWidgetFormDoctrineChoice扩展为选项卡式窗口小部件

时间:2013-01-10 11:38:25

标签: php forms doctrine symfony-1.4

我在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 &lt; sfWidgetFormChoice &lt; sfWidgetFormChoiceBase &lt; sfWidgetForm &lt; sfWidget

这是表格的类继承:

ProductForm &lt; BaseProductForm &lt; BaseFormDoctrine &lt; sfFormDoctrine &lt; sfFormObject

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

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

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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

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

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

您应该查看sfWidgetFormChoice和目标方法self sfWidgetFormDoctrineChoice。如果您编写自己的类继承自sfWidgetFormDoctrineChoice,则可以覆盖方法rendergetJavaScripts。此外,您可以为此窗口小部件实现自己的渲染器,这将生成js选项卡和gui内容。

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