Symfony: как пройтись по полям объекта Doctrine - PullRequest
1 голос
/ 08 января 2011

Мне нужно перебрать список полей в пользовательском валидаторе, чтобы сравнить значение со значением, уже сохраненным в базе данных.

Мой код здесь:

$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);
     }
 }

ТАК в основноммне нужно создать функцию получения из имени поля в $ field.

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 08 января 2011

Doctrine-запись реализует интерфейс ArrayAccess.Вы можете просто получить доступ к записи в виде массива:

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

Вы также можете использовать sfInflector для создания имени получателя:

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