2012-01-11 46 views
0

在symfony中。 。 。我的形式看起來像這樣Symfony sfForm密碼(必需和比較)

<?php 

class ChangeMyPasswordForm extends sfForm { 

    const PASSWORD_REQUIRED_MSG = "We could not update your password. Your password can not be blank. Please enter at least one character for a password."; 

    protected static $labels = array(
      'password' => 'Your Password', 
     'confirm' => 'Re-enter Password', 
    ); 

    public function configure() 
    { 
     $this->setWidgets(array(
      'password' => new sfWidgetFormInputPassword(array()), 
      'confirm' => new sfWidgetFormInputPassword(array()), 
     )); 

     $this->setValidators(array(
      'password' => new sfValidatorPass(), 
      'confirm' => new sfValidatorPass(), 
     )); 

     $this->validatorSchema->setOption('allow_extra_fields', true); 

     $this->mergePostValidator(
      new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::IDENTICAL, 
       'confirm', array(), array(
        'invalid'=>'Passwords do not match. Please try again.' 
       ) 
      ) 
     ); 

     $this->mergePostValidator(new sfValidatorString()); 
     $this->widgetSchema->setLabels(self::$labels); 
    } 
} 

在我的控制器

public function executeMyAccountPassword(sfRequest $request) { 
     $this->form = new ChangeMyPasswordForm(); 
     $this->validated=$request->getParameter('validated'); 

     $this->form->bind(array(
       'password' => $request->getParameter('password'), 
       'confirm' => $request->getParameter('confirm'), 
    )); 

     if ($request->isMethod('post')) { 

      if ($this->form->isValid()) { 
       $this->validated = true; 

       // get player object 
       $player = $this->getUser()->getProfile(); 
       $player->setPassword($request->getParameter('password')); 
      } 
     } 

我想添加一個校驗,因此密碼字段不能爲空。我嘗試修改

$this->setValidators(array('password'=>new sfValidatorString('required'=>'Please enter a password'))); 

但是,即使沒有發佈數據,表單也會拋出錯誤。任何人都可以向我展示如何驗證兩個匹配密碼字段的正確示例,並確保字段不會留空(表單提交後)。謝謝 !!

+0

的結合? 1.4? – MrGlass 2012-01-11 18:45:24

+0

另外,你得到了什麼錯誤? – MrGlass 2012-01-11 18:45:49

+0

Yessir。 。 。 1.4沒有收到錯誤。它會呈現錯誤消息「密碼不匹配」的表單。請再試一次。'這是正確的信息,我只需要它在表單發佈後運行驗證器。 – TuK 2012-01-11 18:48:23

回答

2

你有第二個錯誤。在if下,將綁定向下移動幾行。這意味着你應該做的發佈

if ($request->isMethod('post')) 
{ 
    $this->form->bind(array(
    'password' => $request->getParameter('password'), 
    'confirm' => $request->getParameter('confirm'), 
)); 

    ... etc... 
} 
您正在使用什麼版本的symfony
1

您在$ this-setValidators中有語法錯誤。你失蹤了幾個括號:

$this->setValidators(array('password'=>new sfValidatorString('required'=>'Please enter a password')));

+0

對不起回合 - 當我編寫後,一定是一種類型 - 現在編輯它。當我添加此行時,表單會在渲染後立即吐出錯誤消息。 - 當然,這個字段是空白的,表單剛剛呈現,用戶還沒有輸入任何內容。 – TuK 2012-01-11 18:55:06