2010-02-01 3 views
1

Я использую среду Zend MVC вместе с слоем ORM, сгенерированным с помощью Propel, и я пытаюсь найти лучший способ поймать исключения из функции save() объекта Propel и бросить их к форме Zend как ошибки.Проверка уровня формы в Zend Framework

Не все исключения, которые выходят из объекта Propel, имеют способ определить, какое поле вызвало ошибку, поэтому мне интересно, есть ли способ добавить общие сообщения об ошибках во всю форму, а не быть принудительно прикреплять каждое сообщение об ошибке к определенному элементу формы.

К примеру, у меня есть вызов сохранить(), завернутый в Try/поймать блок, и я могу добавить exception-> GetMessage() к ошибкам элемента формы в:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->name->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->name->markAsError(); 
    $form->populate($formData); 
} 

, но я хотел бы чтобы быть в состоянии сделать что-то вроде этого:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->markAsError(); 
    $form->populate($formData); 
} 

Я надеюсь, что имеет смысл, спасибо за помощь,

Дэйву

ответ

1

Вы думаете об ошибках из базы данных или из уровня проверки Propel (который не так развит и не используется по умолчанию на этапе save())?

Если вы хотите использовать ошибки базы данных, имейте в виду, что они вернут только первую ошибку (поэтому пользователь должен отправить четыре раза, если они ввели три ошибки). Кроме того, получение имени поля из сообщения об ошибке can be hard. Имейте в виду, что некоторые клавиши охватывают несколько полей («комбинация из name и first_name должна быть уникальной»).

Вот почему, например, Symfony добавляет проверку в слое формы. Там вы можете сразу проверить все поля и вернуть несколько ошибок. Но, возможно, вы уже это сделали, и только хотите, чтобы это было окончательной проверкой?

+0

Я могу проверить все поля в слое формы с помощью Zend, но я все еще хочу выпустить ошибки Propel в качестве окончательной проверки. В идеале я бы включил все возможные ошибки, которые могли бы возникнуть из Propel обратно в слой формы в Zend, но пока я просто хочу, чтобы представление формы не попадало на неприятную страницу ошибок PHP. Мне нужно будет провести некоторое исследование, чтобы выяснить лучший способ устранения уникальных ошибок ограничения ключа в Zend_Form. Спасибо за вашу помощь, –