yii2框架-yii2的rules验证(七)

原创 2016年05月31日 10:09:27
yii2的验证规则是一个非常实用而且高效安全的验证功能,下面是我自己的一些总结
在一个model里,继承ActiveRecord,重写覆盖原来的rules(),同时可以 启动场景的功能,重新覆盖scenarios()函数


model模型User.php:

namespace app\models;
use Yii;
use yii\web\IdentityInterface;
use yii\db\ActiveRecord;
use yii\captcha\Captcha;

class User extends ActiveRecord {

	//定义好属性,因为在mysql的表里没有这些字段,所以需要用到就得自定义
	//整个model的属性,其实还包括mysql的字段,ActiveRecord已经帮我们完成,所以无需定义
	public $verifyCode;
    public $password_compare;

     /**
     * @inheritdoc
    */
    public function rules()
    {
        return [
            //注册时必须字段,在register,和savede场景中都必须要
            [['useraccount', 'username', 'password'],'required','on'=>['register','save']],

            //任何场景都需要验证
            ['useraccount','string','length' =>[7,12]],

            /**验证是否唯一,即用户名是否已注册,在save场景中,这个动作由前端表单的设置'enableAjaxValidation'=>true来ajax异步触发,在控制器的save中要执行以下的代码:
            	$model->load($_POST);

		  if (Yii::$app->request->isAjax) {

		   	Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

		   	return \yii\bootstrap\ActiveForm::validate($model); 
		  }
            */
            ['useraccount', 'unique', 'targetClass'=>self::className(), 'message' => '此用户名已经被使用','on'=>'save'],


            //登录时字段必须
            [['useraccount','password'],'required','on'=>['login','dologin']],


            //密码验证,内联validatePassword的函数名进行验证
            ['password','validatePassword','skipOnEmpty'=>false,'on'=>['dologin']],

            //再次确认密码
            ['password_compare','required','on'=>'register'],

            //再次确认密码和密码对比
            ['password_compare', 'compare', 'compareAttribute' => 'password','message' => '两次密码不一致','on'=>'register'],

            /**验证码验证,在登录场景中,captchaAction的要设置正确,在user控制器中的公共actions中定义
            	public function actions()
		{
			return [
			  'captcha' => [
			      'class' => 'yii\captcha\CaptchaAction',
			      'maxLength' => 5,
		              'minLength' => 5,
			      'height'=>30,
			      'backColor'=>0xFE2341,
			     'offset'=>2
			   ],
	                ];
		}
            */
            ['verifyCode','captcha','captchaAction'=>'user/captcha','on'=>['login']]

        ];
    }

    public function scenarios()
    {
        $scenarios = parent::scenarios();
    	
    	//各个场景的活动属性
        $scenarios['register'] = ['useraccount', 'username', 'password','password_compare'];
        $scenarios['save'] = ['useraccount', 'username', 'password'];
        $scenarios['login'] = ['useraccount','password','verifyCode'];
        $scenarios['dologin'] = ['useraccount','password'];

        return $scenarios;
    
    }

    //这里是一些其他的登录认证函数..........
    

}
controller控制器UserController.php:

public function actions()
		{
		    return [
		         'captcha' => [
		              'class' => 'yii\captcha\CaptchaAction',
		              'maxLength' => 5,
		              'minLength' => 5,
		              'height'=>30,
		              'backColor'=>0xFE2341,
		              'offset'=>2
		         ],
		     ];
		}


	public function actionRegister() {

			$model = new User();
			$model->setScenario('register');

			$id = Yii::$app->user->id;
			// var_dump($id);

			return $this->render('register',['model' => $model]);
		}

	public function actionSave() {

		$model = new User();

		$model->setScenario('save');

		$model->load($_POST);

  		if (Yii::$app->request->isAjax) {

   			Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

   			return \yii\bootstrap\ActiveForm::validate($model); 
  		}

		$account = Yii::$app->request->post('User')['useraccount'];

		$model->load(Yii::$app->request->post());

		$model->authkey = md5($account);

		$model->accesstoken = md5($account);

		$model->password = md5(Yii::$app->request->post('User')['password']);

		$result = $model->save();
		
		if($result) {
			return $this->redirect(['index']);
		}
	}
view的视图register.php:

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<style type="text/css">
    div.required label:before {
    content: " *";
    color: red;
}
</style>

<div class="register row" >
    <div class="col-lg-3">
    	<?php $form = ActiveForm::begin(['action' => ['user/save'],'enableAjaxValidation'=>true,'method'=>'post','options' =>['data-name'=>'yii','class'=>'form-horizontal']]); ?>
        
        <?= $form->field($model, 'useraccount',[
            'template'=>"<span class='glyphicon glyphicon-user'></span>{label}\n{input}\n{error}"

        ])->textInput(['placeholder' =>'请输入用户账号'])->label('用户账号') ?>

        <?= $form->field($model, 'username')->textInput()->label('用户名称') ?>

        <?= $form->field($model, 'password')->passwordInput()->label('密码') ?>

        <?= $form->field($model, 'password_compare')->passwordInput()->label('确认密码') ?>
        
        <?= Html::submitButton('注册', ['class'=>'btn btn-mod btn-primary','name' =>'submit-button']) ?>
        
        <?php  ActiveForm::end(); ?>
    </div>
</div>




版权声明:本文为博主原创文章,未经博主允许不得转载。

yii2表单验证方法

model层的书写验证规则 return [ [['username','password','email','phone','images'],'required','message'=>'不能为空...
  • song_csdn1550
  • song_csdn1550
  • 2016年03月29日 12:23
  • 5042

yii2 model validate

在表单提交的时候对表单数据的验证是一个很必要的行为 所以要尽可能的严格的控制输入的数据 http://www.yiichina.com/doc/guide/2.0/input-validation...
  • xihuangwutong
  • xihuangwutong
  • 2015年10月31日 17:07
  • 1543

Yii2 rules函数

同1一样,返回验证规则,源码中大概支持一下几种类型'boolean' => 'yii\validators\BooleanValidator', 'captcha' => 'yii\captc...
  • l786112323
  • l786112323
  • 2016年02月27日 01:02
  • 1343

yii2 rules验证解析

1,model类规则 public function rules() { return [ [['username','password','sex','qq','xueli','ho...
  • caotianyin
  • caotianyin
  • 2015年12月24日 10:25
  • 631

Yii2 Model的一些常用rules规则

提示:打印出Validator::$builtInValidators可以看到被支持的所有validators去除首尾空白字符['email', 'trim'] 或 ['email', 'filter...
  • ljfrocky
  • ljfrocky
  • 2015年06月05日 10:49
  • 9632

yii2 scenarios rules 使用心得

原文转自  It技术擎 下面介绍scenarios  rules  使用 心得 例子: region.php public function scenarios()     {     ...
  • zhengtao27
  • zhengtao27
  • 2015年11月16日 11:49
  • 1739

Yii2 rules验证规则

去除首尾空白字符 [php] view plain copy ['email', 'trim'] 或 ['email', 'filter', 'filter' => 'trim...
  • h330531987
  • h330531987
  • 2017年08月14日 00:35
  • 428

yii2-rules条件验证应用

--Core validator 如 required 同时支持客户端验证和服务端验证;Inline validator 如 validname 不支持客户端验证。   validname vali...
  • xmlife
  • xmlife
  • 2016年08月27日 11:33
  • 1084

Yii2 rules验证规则

去除首尾空白字符 ['email', 'trim'] 或 ['email', 'filter', 'filter' => 'trim'] 字段必填 ['email', 'required'] 赋予默...
  • navioo
  • navioo
  • 2016年04月08日 14:43
  • 6668

关于YII save() 返回false

RT、 使用model的save时候返回失败   打印日志也没找到端倪。狗之查了些资料。现在分享出来 public function rules() { return array( ...
  • yao970953039
  • yao970953039
  • 2014年03月19日 23:22
  • 6803
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:yii2框架-yii2的rules验证(七)
举报原因:
原因补充:

(最多只允许输入30个字)