我正在尝试更改嵌入表单的表单格式化程序。是否有可能接近这样的事情?
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>
答案 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');
}
}
希望这会有所帮助:)