Php 特定字段的Yii验证
问题防御 我有一个名为“user.php”的模型 我有一些相同的验证规则,如下所示 我现在要创建一个密码重置表单 在这种形式下,我有一个文本框名称email(与用户模型中使用的电子邮件相同) 在密码重置表单中,我想检查此用户是否为已注册用户,是否已注册用户将发送密码重置链接 我不知道如何确定这个电子邮件领域的日期,任何帮助都非常值得赞赏,因为我是YII的新手 user.phpPhp 特定字段的Yii验证,php,yii,Php,Yii,问题防御 我有一个名为“user.php”的模型 我有一些相同的验证规则,如下所示 我现在要创建一个密码重置表单 在这种形式下,我有一个文本框名称email(与用户模型中使用的电子邮件相同) 在密码重置表单中,我想检查此用户是否为已注册用户,是否已注册用户将发送密码重置链接 我不知道如何确定这个电子邮件领域的日期,任何帮助都非常值得赞赏,因为我是YII的新手 user.php class Users extends CActiveRecord { public $cpassword;
class Users extends CActiveRecord
{
public $cpassword;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'users';
}
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('email, password, user_type , cpassword','required'),
array('email', 'length', 'max'=>200),
array('email', 'unique'),
array('email', 'email'),
array('password', 'length', 'max'=>300),
array('cpassword', 'length', 'max'=>300),
array('user_type', 'length', 'max'=>5),
array('cpassword', 'compare', 'compareAttribute' => 'password'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, email, password, user_type ', 'safe', 'on'=>'search'),
);
}
public function relations()
{
return array(
);
}
public function attributeLabels()
{
return array(
'id' => 'ID',
'email' => 'Email',
'password' => 'Password',
'user_type' => 'User Type',
'cpassword' => 'Confirm Password'
);
}
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('email',$this->email,true);
$criteria->compare('password',$this->password,true);
$criteria->compare('user_type',$this->user_type,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
public function beforesave()
{
$this->password=md5($this->password);
return true;
}
}
您可以通过以下方式检查提交:
$user = User::model()->find("email = '".trim($model->email)."'");
if (!empty($user)){
// users exists
} else {
// user does not exist
}
如果确实要使用该模型,可以设置电子邮件必须唯一的规则,如下所示:
array('email', 'unique', 'message' => 'Email already in use'),
if($model->validate(array('attribute_name'))
// valid
}
然后,您可以检查模型是否在submit上进行了验证,特别是在email字段。如果未验证电子邮件地址是否存在
最后,您可以验证单个模型属性,如下所示:
array('email', 'unique', 'message' => 'Email already in use'),
if($model->validate(array('attribute_name'))
// valid
}
下面是完成整个操作的一种方法(不是最好的方法,但最容易理解!)
您是否希望根据输入的电子邮件地址检查用户是否存在?没错,但如何仅检查一个字段;为同一个表创建不同的模型是一种好方法吗?您可以使用场景,基于不同的场景有不同的验证规则,例如,创建新记录和更新现有记录有不同的规则。您可以在这里阅读有关场景的内容-我可以检查一下数据库中是否有电子邮件字段(如unique),如果没有,我想抛出错误('message'=>'不是注册的电子邮件地址'))如果我使用的是您的代码$user=user::model()->find(“email=”。trim($model->email)。“”;如果(!empty($user)){//users exists}或者{//user not exists}发现该用户未注册,我如何将错误推送到相应的视图,即推送到yii生成的表单,$form->error($model,'email')是的,这正是将发生的情况。因此,这很可能会出现在您的控制器中,在if(isset($_POST['User']){}之后。因此,它正在查询数据库,以查看是否有一个用户的电子邮件地址等于提交的电子邮件($model->email)对不起,我不明白你的意思,在控制器中,我正在确认当前用户没有重新注册的电子邮件,我如何将该错误推送到相应的视图,即在我的视图文件中,error msg显示如下$form->error($model,'email'),如何将我的错误值分配给这个变量,爱斯基摩人,谢谢你宝贵的回答。还有一个疑问,在你的回答中,你是按如下方式查看错误->呈现(“resetpassword”,array(“model”=>$model,“error\u message”=>“找不到这样的用户!”);但我想将$error_message的值指定给$form->error($model,'email');这样我就可以用默认的yii样式显示错误,否则我就必须编写这样的代码,有什么方法可以这样做吗。谢谢你的帮助:)