2011-01-08 4 views
1

カスタムバリデータのフィールドのリストをループして、データベースに既に格納されている値と値を比較する必要があります。symfony:Doctrineオブジェクトのフィールドをループする方法

ここに私のコード:

$healthUser = PersonTable::getInstance->getHealthUser(trim($values['nhi'])); 

if ($healthUser->getNHI() == trim($values['nhi']) && 
$healthUser->getName() != trim($values['name'])){ 

//Also loop through all fields and show differences 
foreach (array('suite','hnr_street','suburb','city','postcode','postal_address') 
     as $field){ 

    if ($value[$field] != $healthUser->getFieldName()){ 
//How do I get the field name from $field?--^^^^^^^^^^ 


     $errorSchemaLocal->addError(new sfValidatorError($this, 
            'fieldIsDifferent', $healthUser->getFieldName()), 
            $field); 
    } 
} 

SO基本的に私は$フィールドにフィールド名からgetter関数を作成する必要があります。

どうすればいいですか?

答えて

1

DoctrineレコードはArrayAccessインターフェイスを実装します。あなたは、単に配列としてレコードにアクセスすることができます

$getField = sprintf('get%s'), ucfirst(sfInflector::cammelize($field))); 
if ($value[$field] != $healthUser->$getField()) { 
    // ... 
} 
+0

クール:

if ($value[$field] != $healthUser[$field]) { // ... } 

ます。また、ゲッターの名前を構築するためにsfInflectorを使用することができます!私はsfInflectorCammelize関数について知らなかった。確かに非常に便利です。ありがとう。 – Flukey

+0

ArrayAccessは私にとっては機能しません - このバージョンは特定ですか?さもなければ、インフレクター機能の使用に満足してください。 – jdog

+0

いいえ、それは特別なことではありません。これはしばしばドキュメントのモデルに対処する標準的な方法です:http://www.doctrine-project.org/projects/orm/1.2/docs/manual/working-with-models/en#dealing-with-relations:creating関連レコード –

関連する問題