Zend_Form - isPost () возвращает false

1

Я хочу написать небольшую регистрационную форму. Это мой код формы:

class Application_Form_Register extends Zend_Form
{

    public function init()
    {
        $this->setMethod('post');

        $this->addElements(
            [
                $this->getNameFirst(),
                $this->getNameLast(),
                $this->getEmail(),
                $this->getPassword(),
                $this->getPasswordConfrim(),
                $this->getSex(),
                $this->getDateBirth(),
                $this->getAddressStreet(),
                $this->getAddressStreetHn(),
                $this->getAddressStreetAn(),
                $this->getCityCode(),
                $this->getCityName(),
                $this->getSubmitButton(),
            ]
        );

    }
}

Это моя регистрация в соответствующем контроллере:

public function registerAction()
    {
        $form = new Application_Form_Register();
        $this->view->form = $form;

        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {
                $values = $form->getValues();
                var_dump($values);die();
            }
        }
    }

Я не знаю, почему метод isPost() возвращает false. Какие-либо предложения?

  • 0
    показать ваш контент indexAction в том же контроллере
  • 0
    пустой. Я не написал код в этом действии
Показать ещё 2 комментария
Теги:
forms
zend-framework

1 ответ

1

Для хорошей практики - измените свою логику следующим образом:

  1. создайте файл с именем form.phtml и следующий примерный контент:

    <h2>Please sign up:</h2>
    <?php echo $this->form ?>
    
  2. Измените свой RegisterController.php таким образом:

    class RegisterController extends Zend_Controller_Action
    {
        public function getForm()
        {
            // creating form
            $form = new Application_Form_Register();
            return $form;
        }
    
        public function indexAction()
        {
            // rendering form.phtml
            $this->view->form = $this->getForm();
            $this->render('form');
        }
    
        public function registerAction()
        {
            if (!$this->getRequest()->isPost()) {
                return $this->_forward('index');
            }
            $form = $this->getForm();
            if (!$form->isValid($_POST)) {
                // if form values aren't valid, output form again
                $this->form = $form;
                return $this->render('form');
            }
    
            $values = $form->getValues();
            //var_dump($values);die();
            // authentication...
        }
    }
    
  3. Сначала нужно вызвать действие index чтобы показать регистрационную форму пользователю. Также убедитесь, что кнопка submit в форме регистра указывает на register действия. Надеюсь, вы добавили кнопку отправки таким образом: $form->addElement('submit', 'register', array('label' => 'Sign up'));

  4. Проверить результаты

  • 0
    Я знаю, что документация показывает нам это решение, но мой вопрос «Есть ли способ показать и отобразить форму одним действием?». Я знаю, что это возможно, но как?
  • 0
    Вы можете попытаться сконцентрировать всю логику внутри indexAction и изменить назначение в параметрах кнопки отправки: $form->addElement('submit', 'index', array('label' => 'Sign up'));
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню