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

Symfony1 Symfony 1.4:如何区分同一模块中的两种形式,symfony1,symfony-1.4,Symfony1,Symfony 1.4,我有一个模块:工作 在Job中,我有两个部分: _帕蒂亚拉 _partialB 两个部分使用相同的JobForm.Class.php 以下是我想要达到的目标: 在JobForm.Class.php中: function removeFields() { if ($partialName == 'partialA'){ unset ($this['field_a']); } if($partialName == 'partialB'){ unset ($this['field_b']); } }

我有一个模块:工作

在Job中,我有两个部分: _帕蒂亚拉 _partialB

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

以下是我想要达到的目标:

在JobForm.Class.php中:

function removeFields()
{
if ($partialName == 'partialA'){
unset ($this['field_a']);
}
if($partialName == 'partialB'){
unset ($this['field_b']);
}
}
显然,我很难定义$partialName'

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


提前谢谢

首先,我不会教表单部分名称,因为它不应该绑定到视图层。相反,请为您试图实现的设置找到一个语义名称,可能是“withExtraFields”,我只是猜测

也就是说,至少有3种方法可以完成您正在尝试的任务:

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

$form = new JobForm($job, array('withExtraFields' => true));
if($this->getOption('withExtraFields') //do something
然后在表单中对其进行操作:

$form = new JobForm($job, array('withExtraFields' => true));
if($this->getOption('withExtraFields') //do something
或者,您可以在控制器中取消设置可能不是最好的位置:

//actions.class.php
if($partialName == 'partialA') unset($form['field_a']);
或者,如上所述,如果应用多个字段或不同的验证规则,您可以创建两种不同的表单:

//actions.class.php
if($partialName == 'partialA') $form = SpecialJobForm();
else $form = NotSoSpecialJobForm();
希望这有帮助。
丹尼尔

我实际上使用了安德烈·喜力推荐的解决方案。顺便说一句,我喜欢啤酒,但是谢谢你,丹,也谢谢你的解决方案。我刚刚创建了一个新的Formclass并扩展了所需的baseModule


这里有一个详细信息链接:

也许你应该定义两个表单,而不是你不知道你可以在同一个模块中定义。我该怎么做呢?你可以定义任意多的类来扩展你的模型表单类谢谢,Andreu。。。成功了!