2011-06-25 56 views
2

我使用Doctrine:Symfony的 - 註冊系統 - 確認密碼,並隱藏輸入

User: 
    columns: 
    username:  { type: string(255), unique: true } 
    password:  { type: string(255) } 
    ip:    { type: string(255) } 

這產生了我新的形式:

username: 
password: 
ip: 

我怎樣才能使確認密碼,並在隱蔽獲取IP地址輸入?

我:

username: 
password: 
confirm password: 

和MySQL數據庫將用戶名,密碼以及IP($ _ SERVER [ 'REMOTE_ADDR'];) 我怎樣才能使它在Symfony的1.4?

THX!

@@@@@@@

補充說:

我做:

$user = $this->form->getObject(); 
    $user->setPassword(sha1($user->getPassword())); 
    $user->setIp($_SERVER['REMOTE_ADDR']); 
    $user = $form->save(); 

setPassword不起作用,但SETIP良好的工作。

回答

2

您可以通過在窗體的configure()方法設置刪除字段:

unset($form['ip']) 

而且通過添加確認密碼字段:

$this->widgetSchema['password']  = new sfWidgetFormInputPassword(); 
    $this->widgetSchema['password2'] = new sfWidgetFormInputPassword(); 
    // Don't print passwords when complaining about inadequate length 
    $this->setValidator('password', new sfValidatorString(array(
     'required' => true, 
     'trim' => true, 
     'min_length' => 6, 
     'max_length' => 128 
     )); 
    $this->validatorSchema['password2'] = clone $this->validatorSchema['password'];   

    $this->mergePostValidator(new sfValidatorSchemaCompare(
     'password', sfValidatorSchemaCompare::EQUAL, 'password2', 
     array()) 
    )); 

你可以在你的操作添加IP .class.php:

if ($request->isMethod('post')) { 
    $this->form->bind($request->getParameter('yourformprefix')); 
    if ($this->form->isValid()) { 
    $user = $this->form->getObject(); 
    $user->setIp($_SERVER['REMOTE_ADDR']); 
    $user->save(); 
    } 
} 

小記:我強烈建議使用現有的插件(doAuth/sfDoctr ineGuardPlugin)如果你打算做這種工作。

+0

非常非常感謝:)我儘快嘗試 –

+0

sfDoctrineGuardPlugin可能不使用數據庫,我必須使用mysql –

+0

我試過了。它工作得很好。感謝您的幫助! –