私はフォームにemail
フィールドを持っています、signup
メールドメインをデータベースで検証したい
Email adress is : example@work.com or etc@etc.com
今、私はそれを検証したい、work.com
またはetc.com
dbにリストされているかどうか、そうでない場合はvaidateしないでください。
誰でもこれで私を助けることができますか?
私はフォームにemail
フィールドを持っています、signup
メールドメインをデータベースで検証したい
Email adress is : example@work.com or etc@etc.com
今、私はそれを検証したい、work.com
またはetc.com
dbにリストされているかどうか、そうでない場合はvaidateしないでください。
誰でもこれで私を助けることができますか?
コード:
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();
}
ノート:
モデルのルール セクションにカスタム 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/ を参照してください。