Zend Form не проверяет ввод

Zend Form сегодня мне не друг!

Это работает :-

Контроллер:-


public function indexAction()
    {
        $loginForm = new Application_Form_Login();

        //is there a submitted form?
        if($this->getRequest()->isPost()){
         //yes there is so process it.
         $formdata = $this->getRequest()->getPost();
         if($loginForm->isValid($formdata)){
          $user_logon = $loginForm->getValue('user_name');
          $user_pw = $loginForm->getValue('user_pw');
          if($this->authenticate($user_logon, $user_pw)){
           $this->_redirect();
          }
         } else {
          $this->view->errors = $loginForm->getMessages();
         }
        }

        $this->view->loginForm = $loginForm;

Форма


class Application_Form_Login extends Zend_Form
{

    public function init()
    {
        /* Form Elements & Other Definitions Here ... */

     $this ->setName('Login');
     $this ->setAction('login')
       ->setMethod('post');

     $name = new App_Form_Element_Text('user_name');
     $name ->setLabel('User Name')
       ->setRequired(true);
     $pword = new Zend_Form_Element_Password('user_pw');
     $pword ->setLabel('Password')
       ->setRequired(true)
       ->addValidator('Alnum');
     $submit = new Zend_Form_Element_Submit('Submit');
     $submit ->setAttrib('id', 'Submit');

     $this->addElements(array($name, $pword, $submit));

     // buttons do not need labels
        $submit->setDecorators(array(
            array('ViewHelper'),
            array('Description'),
            array('HtmlTag', array('tag' => 'span', 'class'=>'submit-group')),
        ));
    }
}

Это не так!

Контроллер


 public function addAction()
    {
     $addform = new Application_Form_Student_Add();

     //has a form been submitted?
     if($this->getRequest()->isPost()){
      if(isset($_POST['Cancel'])) $this->_redirect('/student');
      $formdata = $this->getRequest()->getPost();
      if($addform->isValid($formdata)){
       Zend_Debug::dump($formdata);
      } else {
       $this->view->errors = $addform->getMessages();
      }
  }
  $this->view->addForm = $addform->generate();
    }

Форма


public function init()
 {
  $this->studentform = new Zend_Form();

  $baseUrl = new Zend_View_Helper_BaseUrl();
  $action = $baseUrl->baseUrl() . "/student/add";

  $this->studentform->setAction($action);
  $this->studentform->setName('addStudent');
  $this->studentform->setMethod('post');

  $student_title = new App_Form_Element_Text('student_title');
  $student_title ->setLabel('Titletest')
      ->setRequired(true);
  $cancel = new Zend_Form_Element_Submit('Cancel');
  $submit = new Zend_Form_Element_Submit('Submit');
  $this->studentform->addElement($student_title);
  $this->studentform->addElement($cancel);
  $this->studentform->addElement($submit);
 }

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

Я смотрел на это часами, и, вероятно, нужен кто-то еще, чтобы посмотреть на код и указать на ослепляюще очевидное для меня.

В обоих случаях представление просто повторяет форму.


person vascowhite    schedule 28.08.2010    source источник


Ответы (1)


В рабочем коде вы используете $this для ссылки на вашу форму в init, во второй версии вы используете $this->studentForm.

Поэтому мне было бы любопытно узнать, почему там различаются коды и из какого объекта этот второй init. Код, который вы разместили, отличается.

Что-то подсказывает мне, что в вашем втором контроллере вы должны использовать

$addform->studentForm->stuff

Поскольку это не экземпляр Zend_Form, а объект, содержащий studentForm Zend_Form.

person Iznogood    schedule 29.08.2010
comment
Спасибо, вы попали в точку. Я не заметил этой разницы в своем коде. Как я уже сказал, я смотрел на это слишком долго! Еще раз спасибо. - person vascowhite; 29.08.2010
comment
эй добро пожаловать! Пожалуйста, не забывайте принимать ответы, когда они помогают, и голосовать! - person Iznogood; 29.08.2010
comment
@vascowhite Добро пожаловать в stackoverflow, пожалуйста, ознакомьтесь с часто задаваемыми вопросами здесь: stackoverflow.com/faq - person Iznogood; 29.08.2010