2010-12-01 4 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

自分で質問に答えます:) リレーションの埋め込みフォームのフォーマッタを変更しようとしたときに問題が発生しました。これは、誰かが

+0

感謝:)を助ける

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

希望を次のように私はこれを解決しました!私は "setFormFormatterName"埋め込まれたフォームの "setFormFormatterName"のみ動作しました。 – CrashOverwrite

関連する問題