嵌入式表单的表单格式不同?

时间:2010-12-01 14:00:58

标签: php forms symfony1

我正在尝试更改嵌入表单的表单格式化程序。是否有可能接近这样的事情?

class sfOuterForm extends sfForm {
  public function configure()
  {
    $innerForm = new sfForm();
    $this->embedForm('inner', $innerForm);
    $this->getWidgetSchema()->setFormFormatter('list');
    $this->getEmbeddedForm('inner')->getWidgetSchema()->setFormFormatterName('table');
  }
}

我期待以下内容:

echo (new sfOuterForm())

输出:

<li><label>Outer Label</label><input type="text" /></li>
<li>
  <table>
   <tr><td><label>Inner Label</label></td><td><input type="text" /></td></tr>
  </table>
</li>

2 个答案:

答案 0 :(得分:1)

嵌入表单后,它的原始窗口小部件架构和验证器架构不执行任何操作 - 它们已合并到顶级架构中。因此,您需要在嵌入之前设置表单格式化程序:

$this->getWidgetSchema()->setFormFormatter('list');
$innerForm = new sfForm();
$innerForm->getWidgetSchema()->setFormFormatterName('table');
$this->embedForm('inner', $innerForm);

值得一看sfForm :: embedForm,看看内部发生了什么。

答案 1 :(得分:1)

我会自己回答我的问题:) 当我试图改变关系嵌入形式的格式化时出现问题。我解决了这个问题如下:

class sfOuterForm extends sfForm {
  public function configure()
  {
    $innerForm = new sfForm();
    $this->embedRelation('relationName');
    $this->getWidgetSchema()->setFormFormatter('list');
    $this->getEmbeddedForm('relationName')->getWidgetSchema()->setDefaultFormFormatterName('table');
  }
}

希望这会有所帮助:)