2

因此,我在同一页面上有 3 个表单和相同的控制器操作,当我单击其中一个提交按钮时,它会验证所有表单而不是我单击的那个。

我怎样才能将它与验证分开?

这是我的代码:

public function signUpAction()
{
    $firstName = $this->getRequest()->getParam('firstName');
    $lastName = $this->getRequest()->getParam('lastName');
    $email = $this->getRequest()->getParam('email');
    $emailAdrress = $this->getRequest()->getParam('Email_Address');
    $password = $this->getRequest()->getParam('password');

    $signupForm = new Application_Form_UserSignUp();
    $loginForm = new Application_Form_UserLogin();
    $retreivePasswordForm = new Application_Form_UserRetreivePassword();

    if ($this->getRequest()->isPost('signupForm'))
    {
        /*********** Sign Up Form ***********/
        if ($signupForm->isValid($this->getRequest()->getParams()))
        {
            $user = $this->_helper->model('Users')->createRow($signupForm->getValues());   
            if ($user->save())
            {
                Zend_Session::rememberMe(186400 * 14);
                Zend_Auth::getInstance()->getStorage()->write($user);
                $user->sendSignUpEmail();
                $this->getHelper('redirector')->gotoRoute(array(), 'invite');
                return;
            }
            else 
            {
            }
        }
        else
        {
            // something
        }
    }
    if ($this->getRequest()->isPost('loginForm'))
    {
        /************ Login Form ************/
        if ($loginForm->isValid($this->getRequest()->getParams()))
        {
            $user = $this->_helper->model('Users')->createRow($loginForm->getValues()); 
            $user = $this->_helper->model('Users')->fetchRowByFields(array('email' => $email, 'hash' => $password));

            if($user) 
            {
                Zend_Session::rememberMe(86400 * 14);
                Zend_Auth::getInstance()->getStorage()->write($user);
                $this->getHelper('redirector')->gotoRoute(array(), 'invite');
                return;
            } 
            else {
                // Error message
                $this->view->errorMsg = "<b>password</b> - invalid, please try again! *";
            }               
        }
        else
        {
            // something
        }
    }
    if ($this->getRequest()->isPost('retreivePasswordForm'))
    {
        /****** Retreive Password Form ******/
        if ($retreivePasswordForm->isValid($this->getRequest()->getParams()))
        {
            $user = $this->_helper->model('Users')->createRow($retreivePasswordForm->getValues()); 
            $user = $this->_helper->model('Users')->fetchRowByFields(array('email' => $emailAdrress));
            if($user)
            {
                Zend_Auth::getInstance()->getStorage()->write($user);
                $user->sendRetreiveEmail();

                $_SESSION['email'] = $emailAdrress;

                $redirector = $this->_helper->getHelper('redirector');
                $redirector->setCode(301)->setUseAbsoluteUri();
                $newPath = 'http://refer.lavasoft.com/#retreive_sent';
                $redirector->gotoUrl($newPath);

                //$this->view->assign('sendEmail', $emailAddress);
            }
            else
            {
            }
        }
        else
        {
            // something
        }

    }

    $this->view->retreivePasswordForm = $retreivePasswordForm;
    $this->view->loginForm = $loginForm;
    $this->view->signupForm = $signupForm;
}
4

1 回答 1

1

这不是它在 ZF 中的工作方式。除非您在代码中覆盖 isPost(),否则您不能将表单名称传递给 isPost()。

您可以做的是定义所有字段,例如:

loginForm[name]
loginForm[password]

signupForm[name]

等然后检查isset($_POST['loginFom'])

这应该可以正常工作。

或者使用一个名为 formName 的隐藏字段并在您的代码中检查它的值是什么。

您还可以对每个表单使用不同的操作,并最终重定向到 signUpAction ,这将产生相同的结果而没有麻烦。

于 2012-12-06T15:08:02.137 回答