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 に答える