Исключительный класс для форм - PullRequest
2 голосов
/ 14 декабря 2010

Если при формировании ошибок возникают исключения, например, если неверное имя пользователя или неправильный / слишком короткий пароль .etc

Я использовал исключения с формами, однако, когда выдается исключение, отображаются только исключения, а не форма и поле, в котором произошла ошибка, отрывок из моего класса исключений выглядит следующим образом:

выбросить новое InputException ($ field, $ message);

например. // имя пользователя слишком короткое:

выбросить новое InputException («имя пользователя», «Имя пользователя должно быть 6 или более символов»);

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

1 Ответ

2 голосов
/ 14 декабря 2010

Исключения не должны быть выброшены.Для пользовательских интерфейсов я обычно собираю их в стек.

Рассмотрим следующий пример (встроенный в Zend Framework):

class MyController extends Zend_Controller_Action {

   protected $_exceptions = array();

   // Controller action, which displays a form
   public function indexAction() {
      $username = $this->_getParam('username');
      if (empty($username)) {
         $this->addException(
             new InvalidArgumentException('Username cannot be empty')
         );
      }
      // more handling code...
   }

   public function addException(Exception $e) {
      $this->exceptions[] = $e;
   }

   // executing just before displaying the user interface
   public function postDispatch() {
      // assign the exception stack to the view file
      $this->view->exceptions = $this->_exceptions;
      parent::postDispatch();
   }

}

Вы все еще можете создавать Exception классы, не бросая их.В приведенном выше примере я укладываю их в контроллер и передаю их в представление перед его отображением.В представлении я могу просто сделать:

if (!empty($this->exceptions)) {
   foreach ($this->exceptions as $exception) {
      // display something
   }
}

Конечно, вы можете настроить ваши классы исключений (например, InputException, как в вашем примере), и вы все равно можете выбросить их при необходимости, например,в AJAX-запросах и т. д.

Надеюсь, это поможет!

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