我需要遍历自定义验证器中的字段列表,以将值与已存储在数据库中的值进行比较。
我的代码在这里:
$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中的字段名称创建getter函数。
知道怎么做吗?
答案 0 :(得分:1)
Doctrine记录实现了ArrayAccess接口。您只需将记录作为数组访问:
if ($value[$field] != $healthUser[$field]) {
// ...
}
您还可以使用sfInflector构造一个getter名称:
$getField = sprintf('get%s'), ucfirst(sfInflector::cammelize($field)));
if ($value[$field] != $healthUser->$getField()) {
// ...
}