0

私はフォームにemailフィールドを持っています、signup

メールドメインをデータベースで検証したい

Email adress is : example@work.com  or etc@etc.com

今、私はそれを検証したい、work.comまたはetc.comdbにリストされているかどうか、そうでない場合はvaidateしないでください。

誰でもこれで私を助けることができますか?

4

2 に答える 2

3

コード:

public function validate($attributes = null, $clearErrors = true) {
    parent::validate($attributes, $clearErrors);
    if (!$this->hasErrors('email')) {
        $a = explode('@', $this->email);
        if (isset($a[1])) {
            $record = AllowedDomains::model()->findByAttributes(array('domain'=>$a[1]));
            if ($record === null) {
                $this->addError('email', "This domain isn't allowed");
            }
        }
    }
    return !$this->hasErrors();
}

ノート:

  • このコードをモデルに入れます
  • email - メールアドレスを保持するフィールド
  • AllowedDomains - 許可されたドメインを保持するテーブルの CActiveRecord
  • ドメイン - 正しいデータベース フィールドに置き換えます
  • rules() 関数に電子メールバリデーターを追加することを忘れないでください。これにより、無効な電子メール アドレスが除外され、何か問題がある場合、上記のコードは実行されません。
于 2012-10-31T20:23:27.660 に答える
1

モデルのルール セクションにカスタム yii バリデータを追加することで、これを実現できます。コード例を次に示します。

public $email; // This is the field where the email is stored

/**
 * @return array validation rules for model attributes.
 */
public function rules()
{
    return array(
       array('email', 'checkDomain'),
    );
}

その後、カスタム検証関数を追加できます

public function checkDomain($attribute,$params)
{
    $sEmailDomain = substr(strrchr($this->email, "@"), 1);

    // Check if the domain exists
    ...
    // If the domain exists, add the error
    $this->addError('email', 'Domain already exists in the database');
}

詳細については、http ://www.yiiframework.com/wiki/168/create-your-own-validation-rule/ を参照してください。

于 2012-10-31T20:13:33.700 に答える