YII2.0 验证表单
控制器代码
<?php
namespace app\modules\pub\controllers;
use Yii;
use backend\base\BaseController;
use backend\modules\pub\models\LoginForm;
use backend\modules\pub\models\RegisterForm;
class DefaultController extends BaseController{
public $layout = false;
public function actions(){
return [
// captcha action renders the CAPTCHA image displayed on the contact page
'captcha'=>[
'class' => 'yii\captcha\CaptchaAction',
'backColor'=>0xFFFFFF, //背景颜色
'minLength'=>6, //最短为4位
'maxLength'=>6, //是长为4位
'transparent'=>true, //显示为透明
'testLimit'=>0,
'fixedVerifyCode' => YII_ENV_TEST ? 'test' : null,
],
];
}
//登录
public function actionIndex(){
if (!\Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->render('index', [
'model' => $model,
]);
}
}
//注册
public function actionRegister(){
$model = new RegisterForm();
if ($model->load(Yii::$app->request->post())) {
if ($user = $model->register()) {
if (Yii::$app->getUser()->login($user)) {
return $this->goHome();
}
}
}
return $this->render('register', [
'model' => $model,
]);
}
}
模型代码
<?php
namespace backend\modules\pub\models;
use app\modules\pub\models\YiiUser;
use backend\models\CommonModel;
use Yii;
class RegisterForm extends CommonModel{
public $username;
public $password;
public $password_rep;
public $email;
public $verifyCode;
//验证规则
public function rules(){
return [
//账号、密码、确认密码、邮箱、验证码必须
[['username','password','password_rep','email','verifyCode'],'required'],
//账号只能是汉字/数字/下划线,不能包含空格
['username','match','pattern'=>'/^[\x{4e00}-\x{9fa5}_a-zA-Z0-9]*$/'],
//用户名最大10位,最小3位
['username','string','max'=>16,'min'=>2],
//用户名/邮箱唯一
['username','unique','targetClass'=>'\backend\modules\pub\models\YiiUser','message'=>'账号已存在'],
['email','unique','targetClass'=>'\backend\modules\pub\models\YiiUser','message'=>'邮箱已被绑定'],
//去除空格
[['username','email'],'trim'],
//密码最大16位,最小6位
['password','string','max'=>16,'min'=>6],
//验证邮箱
['email','email','message'=>'邮箱不规范'],
//验证两次密码是否一致
['password_rep','compare','compareAttribute'=>'password','message'=>'两次密码不一致'],
//验证码
['verifyCode', 'captcha','captchaAction'=>'pub/default/captcha'],
];
}
public function attributeLabels(){
return [
'username'=>'用户名',
'password'=>'密码',
'password_rep'=>'确认密码',
'verifyCode'=>'验证码',
'email'=>'邮箱',
];
}
public function register(){
if ($this->validate()) {
$user = new YiiUser();
$user->username = $this->username;
$user->email = $this->email;
$user->setPassword($this->password);
$user->generateAuthKey();
if ($user->save()) {
return $user;
}
}
return null;
}
}
页面Form代码
<?php $form = ActiveForm::begin([
'id' => 'form-signin',
]); ?>
<!--<form id="form-signin" class="form-signin">-->
<section>
<?= $form->field($model,'username')->textInput(['placeholder'=>'只能由汉字/数字/下划线组成,不能包含空格'])->label('账号')?>
<!--<div class="input-group">
<?/*= $form->field($model,'username')->label('账号')*/?>
<input type="text" class="form-control" name="username" placeholder="用户名">
<div class="input-group-addon"><i class="fa fa-user"></i></div>
</div>-->
<?= $form->field($model,'password')->passwordInput(['placeholder'=>'密码'])->label('密码')?>
<?= $form->field($model,'password_rep')->passwordInput(['placeholder'=>'确认密码'])->label('确认密码')?>
<?= $form->field($model,'email')->textInput(['placeholder'=>'邮箱'])->label('邮箱')?>
<?= $form->field($model, 'verifyCode')->label('验证码')->widget(Captcha::className(), [
'options'=>['placeholder'=>'验证码'],
'captchaAction' => 'default/captcha',
'imageOptions'=>['style'=>'margin-top:-5px;',],
'template' => '<div class="row"><div class="col-lg-6">{input}</div><div class="col-lg-6">{image}</div></div>',
]) ?>
<!--<div class="input-group">
<input type="password" class="form-control" name="password" placeholder="密码">
<div class="input-group-addon"><i class="fa fa-key"></i></div>
</div>-->
</section>
<section class="controls">
<div class="checkbox check-transparent">
<!--<input type="checkbox" value="1" id="remember" checked>
<label for="remember">记住我</label>-->
</div>
<a href="#">忘记密码?</a>
</section>
<section class="log-in">
<?= Html::submitButton('注册', ['class' => 'btn btn-greensea']) ?>
<!--<button class="btn btn-greensea">登录</button>-->
<span>或</span>
<?= Html::a('登录',null,['href'=>Url::toRoute('default/index'),'class'=>'btn btn-slategray']) ?>
<!--<button class="btn btn-slategray">创建一个新账号</button>-->
</section>
<!--</form>-->
<?php ActiveForm::end(); ?>
YII2.0 验证表单的更多相关文章
- yii2.0 Activeform表单部分组件使用方法
文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...
- yii2.0 Activeform表单部分组件使用方法 [ 2.0 版本 ]
文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...
- tp框架之自动验证表单
tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...
- ajax验证表单元素规范正确与否 ajax展示加载数据库数据 ajax三级联动
一.ajax验证表单元素规范正确与否 以用ajax来验证用户名是否被占用为例 1创建表单元素<input type="text" id="t"> 2 ...
- js验证表单大全
js验证表单大全 1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert(" ...
- 运用jQuery写的验证表单
//运用jQuery写的验证表单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- 开始使用HTML5和CSS3验证表单
使用HTML5和CSS3验证表单 客户端验证是网页客户端程序最常用的功能之一,我们之前使用了各种各样的js库来进行表单的验证.HTML5其实早已为我们提供了表单验证的功能.至于为啥没有流行起来估计是兼 ...
- H5利用pattern属性和oninvalid属性验证表单
HTML代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- flask 在视图函数中验证表单
在视图函数中验证表单 因为现在的basic_form视图同时接受两种类型的请求:GET请求和POST请求.所以我们要根据请求方法的不同执行不同的代码.具体来说,首先是实例化表单,如果是GET请求,就渲 ...
随机推荐
- 2x2矩阵相乘模版
由于Unity只有4x4矩阵,今天要做一个2x2矩阵的旋转,居然忘了顺序.故写下作为模版记录. 顺序: 下面是使用其进行旋转的C#代码: public struct Position { public ...
- 一步一步教你编写与搭建自动化测试框架——python篇
[本文出自天外归云的博客园] 这两天用python写了一个自动化测试框架,取名为Auty.准备用来做Web方面的接口测试,以下为Auty框架一步一步的搭建过程——
- 封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)
本文利用MongoDB官方发布的C#驱动,封装了对MongoDB数据库的增删改查访问方法.先用官方提供的mongo-csharp-driver ,当前版本为1.7.0.4714 编写数据库访问帮助类 ...
- 将php网站移到CentOS 6.7上[一]:yum安装lamp环境
最近应老师要求,将一个网站从51php上转移到学校提供的服务器上,之前对Linux没有了解,一切都在百度百度百度.于是发现很多步骤自己做过后就忘了,现将有效步骤记录下来,以供下次参考. 原51php上 ...
- keyup与setInterval
<html><body> <input type="text" id="clock" size="35" /& ...
- SPI总线(同步)
一.SPI总线简介 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口.SPI 用 于CPU与各种外围器件进行全双工. ...
- Android属性动画完全解析(上),初识属性动画的基本用法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系 ...
- git: windows git ssh keys生成
http://blog.csdn.net/lsyz0021/article/details/52064829 当我们使用github或者bitbucket等仓库时我们有可能需要ssh认证,所以需要生成 ...
- (转)PowerDesigner提示Existence of index、key、reference错误
建立一个表后,为何检测出现Existence of index的警告 A table should contain at least one column, one index, one key ...
- selenium 安装与 chromedriver安装
直接使用pip安装 pip slenium 用 Chrome 浏览器来测试 from selenium import webdriver browser = webdriver.Chrome() ...