2010-12-01 65 views
0

我試圖改變嵌入式表格的形式格式化。是否有可能接近這樣的事情?不同形式格式化爲嵌入式形式?

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> 

回答

1

一旦形式被嵌入,這是原來的插件架構和驗證架構做什麼 - 他們已經合併到頂層模式中。因此,你需要嵌入前設置窗體格式:

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

這是值得一試成sfForm :: embedForm,看看有什麼內部發生了。

1

,我會親自回答我的問題:) 問題arised當我試圖改變關係的嵌入表單格式。我解決了這個如下:

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

希望這會幫助別人:)

+0

謝謝!我想「setFormFormatterName」爲嵌入形式,但只有「setDefaultFormFormatterName」的作品。 – CrashOverwrite 2016-11-17 16:01:22