2012-08-28 59 views
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; 
} 

回答

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, 
     )); 

我希望這是有用的。

+0

感謝大衛,已經有解決方案工作正常,唯一認爲缺少的是錯誤消息,如果身份驗證服務API返回無效登錄。 –

+0

對不起,我不明白......不是最好的解決方案嗎? 發佈一些代碼,希望能夠說明一些問題。 –

-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