Symfony 1.4:如何区分同一模块中的两种形式

时间:2011-12-12 17:37:05

标签: symfony1 symfony-1.4

  • 我有一个模块:“工作”

  • 在Job中,我有两个部分: _partialA _partialB

两个部分都使用相同的JobForm.Class.php

以下是我正在努力实现的问题:

在JobForm.Class.php中

function removeFields()
{
if ($partialName == 'partialA'){
unset ($this['field_a']);
}
if($partialName == 'partialB'){
unset ($this['field_b']);
}
}

显然,我在定义“$ partialName”

时遇到了困难

帮助?建议?是否有其他/更好的方法来实现相同的预期结果?

提前致谢。

2 个答案:

答案 0 :(得分:0)

首先,我不会教你关于部分名称的表格,因为它不应该与你的视图层绑定。相反,找到你想要实现的设置的语义名称(可能是'withExtraFields'左右,我只是在猜测。)

话虽如此,至少有3种方法可以做你正在尝试的事情:

您可以将其作为选项传递给表单:

$form = new JobForm($job, array('withExtraFields' => true));

然后在表单中对其进行操作:

if($this->getOption('withExtraFields') //do something

或者你可以在控制器中取消设置(可能不是最好的地方):

//actions.class.php
if($partialName == 'partialA') unset($form['field_a']);

或者,如上所述,您可以创建2种不同的表单(如果适用多个字段或不同的验证规则,则最佳):

//actions.class.php
if($partialName == 'partialA') $form = SpecialJobForm();
else $form = NotSoSpecialJobForm();

希望这会有所帮助。 丹尼尔

答案 1 :(得分:0)

我实际上使用过Andreu Heineken建议的解决方案(顺便说一下,喜欢啤酒),但感谢Dan,您的解决方案也是如此。我刚刚创建了一个新的Formclass并扩展了我需要的baseModule。

以下是详细信息的链接:Solution to question