2011-09-09 14 views
2

今私が移入てる/はsetDefaultsコントローラからこのようなZend_Formの:それは働いたが縫い目だDoctrine2エンティティからzend_formを取り込む方法は?

$data = array('user' => $account->getUser(), 
      'password' => $account->getPassword(), 
      'name' => $account->getName()); 

$form->setDefaults($data); 

非常に手動のプロセス。それを行うより良い方法はありますか?

+0

これは多少マニュアルですが、あなたのフォームのフィールド名とあなたのエンティティのメンバー名との間で少なくともいくつかのデカップリングを提供します。私は通常これを 'setDefaultsFromModel()'のようなフォームメソッドにプッシュするか、 'setDefaults()'をオーバーライドしてモデルと配列を受け入れます。 –

答えて

4

私は適用ソリューションは、エンティティにこの機能を追加することでした。ちょうどその

public function toArray() 
{ 
    return get_object_vars($this); 
} 

そして:

$form->setDefaults($test->toArray()); 

また、あなたはarroundのそれを他の方法を行う必要がある場合(配列へオブジェクト)あなたは見ることができますhere

+1

エンティティにアソシエーションまたはプロパティがあり、collumnに直接関係していない場合は、この解決法は良くありません。 – JCM

4

"明白な"解決策は、何らかの形で平坦化エンティティを配列に分解することです。これはあまりにも難しいことではありませんが、いくつかのコーナーケースは醜いことがあります。

よく似た(私はまだ試していませんが、これからです)私が実行した実装はthis one(一部はdocs are here)です。

エンティティのメタデータを参照するためにリフレクションを使用し、次に返される構造の種類についていくつかの良い推測を行います。これは全体的に最良の戦略のようです。私は異常に構造化されたエンティティを処理することが考えられますが、Borisのクラスを調整してエンティティのカスタムシリアル化メソッドをチェックし、存在する場合はエンティティをシリアル化します。

関連する問題