That was tricky. I hope it will help somebody.
<?php class SomeForm extends sfForm { //.. /** * Return array of current errors * * @return array */ public function getErrorsArray() { $errors = $embedded_forms_name = array(); foreach($this->getEmbeddedForms() as $embedded_form){ $embedded_forms_name[] = $embedded_form->getName(); } foreach($this as $field){ if($field->hasError()) { if(in_array($field->getName(), $embedded_forms_name)){ foreach($field as $field_embedded){ if($field_embedded->hasError()) $errors[$field->getName().'_'.$field_embedded->getName()] = $field_embedded->getError()->__toString(); } } else { $errors[$field->getName()] = $field->getError()->__toString(); } } } return $errors; } } |
For embedded forms it return embedded form name plus field name as a key.
You got an idea ;-) It should be standard feature IMHO.
Update:
Of course there is a easier way if you don’t have embedded forms:
//... foreach ($this as $field) { $field->hasError() ? $errors[$field->getName()] = $field->getError()__toString() : null; } |
or
//... foreach ($this->getErrorSchema()->getErrors() as $name => $error) { $errors[$name] = $error->getMessageFormat(); } |
Dokładnie czegoś takiego szukałem. Próbowałem napisać sam podobną funkcję, ale pogubiłem się boleśnie. Dzięki za nieświadomą pomoc :)