yii2框架-yii2的rules验证(七)
yii2的验证规则是一个非常实用而且高效安全的验证功能,下面是我自己的一些总结
在一个model里,继承ActiveRecord,重写覆盖原来的rules(),同时可以 启动场景的功能,重新覆盖scenarios()函数
在一个model里,继承ActiveRecord,重写覆盖原来的rules(),同时可以 启动场景的功能,重新覆盖scenarios()函数
model模型User.php:
namespace appmodels; use Yii; use yiiwebIdentityInterface; use yiidbActiveRecord; use yiicaptchaCaptcha; 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 = yiiwebResponse::FORMAT_JSON; return yiiootstrapActiveForm::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" => "yiicaptchaCaptchaAction", "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" => "yiicaptchaCaptchaAction", "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 = yiiwebResponse::FORMAT_JSON; return yiiootstrapActiveForm::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 yiihelpersHtml; use yiiwidgetsActiveForm; ?> <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} {input} {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>
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: php对特殊字符的处理操作的总结
- 下一篇: yii2框架-yii2的web应用属性(六)