0

ユーザーのログインを検証していますが、ユーザーが認証されていない詳細を送信した場合にフォームにエラー メッセージを添付したいと考えています。

FieldSet では機能を確認できますsetMessages()が、これは要素キーに対してのみ一致して設定されているように見えます。

フォーム要素ではなく、フォームにエラー メッセージを添付するにはどうすればよいですか?

次のコードは、LoginForm クラス内にあります。

public function isValid()
{
    $isValid = parent::isValid();
    if ($isValid)
    {
        if ($this->getMapper())
        {
            $formData = $this->getData();
            $isValid = $this->getMapper()->ValidateUandP($formData['userName'], $formData['password']);
        }
        else
        {
          // The following is invalid code but demonstrates my intentions
          $this->addErrorMessage("Incorrect username and password combination");
        }
    }

    return $isValid;
}
4

2 に答える 2

1

最初の例は、データベースから検証し、エラーメッセージをフォームに送り返すことです。

//Add this on the action where the form is processed
if (!$result->isValid()) {
            $this->renderLoginForm($form, 'Invalid Credentials');
            return;
        }

次は、フォーム自体に簡単な検証を追加します。

//If no password is entered then the form will display a warning (there is probably a way of changing what the warning says too, should be easy to find on google :)
$this->addElement('password', 'password', array(
            'label'    => 'Password: ',
            'required' => true,
        ));

これがお役に立てば幸いです。

于 2012-08-28T09:44:25.863 に答える
-1

ZF1 の場合: エラー メッセージをフォームに添付するために、このためのデコレータ要素を作成できます。

出典:

http://mwop.net/blog/165-Login-and-Authentication-with-Zend-Framework.html

class LoginForm extends Zend_Form
{
    public function init()
    {
        // Other Elements ...

        // We want to display a 'failed authentication' message if necessary;
        // we'll do that with the form 'description', so we need to add that
        // decorator.
        $this->setDecorators(array(
            'FormElements',
            array('HtmlTag', array('tag' => 'dl', 'class' => 'zend_form')),
            array('Description', array('placement' => 'prepend')),
            'Form'
        ));
    }
}

そして、コントローラーの例として:

// Get our authentication adapter and check credentials
$adapter = $this->getAuthAdapter($form->getValues());
$auth    = Zend_Auth::getInstance();
$result  = $auth->authenticate($adapter);
if (!$result->isValid()) {
    // Invalid credentials
    $form->setDescription('Invalid credentials provided');
    $this->view->form = $form;
    return $this->render('index'); // re-render the login form
}

これがまだZF2で機能するかどうかは不明

于 2012-08-28T14:01:59.767 に答える