Проверка уровня формы в Zend Framework - PullRequest
1 голос
/ 02 февраля 2010

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

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

Например, у меня есть вызов save (), заключенный в блок try / catch, и я могу добавить исключение-> 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 Ответ

1 голос
/ 02 февраля 2010

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

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

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

...