表单元素
表关联
1.关联关系:(一对一,一对多)
1). hasMany 一对多
2). hasOne 一对一
例子:
●第一个参数:所关联的模型的类名称。
●第二个参数:是一个数组,其中键为所关联的模型中的属性,值为当前模型中的属性。
public function getUser(){
return $this->hasMany(User::className(), ['user_id' => 'user_id']);
}
2.使用:
1) 关联方法名的定义:
使用getName这种方式命名,get后面的命名首字母大写,
调用这个关联方法时,直接调用name,不需要首字母大写;
name最好是关联的另一个表的表名
2)关联方法调用
//作为属性调用,使用模型把他当做属性调用
$article=new Article();
$article=$article->user;
//在查询数据时用with方法调用
$article=Article::find()->with('user')->asArray()->all();//如果你想最后返回的是标准数组形式,记得加上asArray();
//动态查询,关联关系函数做方法使用
$article=Article::find()->getUser()->where(['id'=>1])->asArray()->all();
3.多表关联(多对多,三张表)
表1 article(文章表) 表二 classify(分类表) 表三 article_classify(中间表)
关联方法(在文章模型中)
public function getClassify()
{
return $this->hasMany(Classify::className(), ['id' => 'classify_id'])
->viaTable('article_classify', ['article_id' => 'id']);
}
分页
//查找文章数据,但并不获得
$article= Article::find()->where(['status' => 1]);
//获得所有的文章总条数
$count=$article->count();
//实例化一个分页模型
$pages=new Pagination([
//一共要被分页的数据总条数
'totalCount'=>$count;
//每页最多展示的数据条数
'pageSize' =>20;
]);
$articles=$article->offset($pages->offset)->limit($pages->limit)->all();
//在页面上使用
use yii\widgets\LinkPager;//命名空间
echo LinkPager::widget([
'pagination' => $pages,
]);
获取控制器名和方法名
$controller=Yii::$app->controller->id;//task控制器名
$action=Yii::$app->controller->action->id;//taskcreate方法名
Gii使用(以青麦聚人气项目为参考)
安装
//方式一:composer命令安装
php composer.phar require --dev --prefer-dist yiisoft/yii2-gii
//方式二:在composer.json中的 require-dev 加上以下代码:
"yiisoft/yii2-gii": "~2.0.0"
然后执行:composer dump
开启
1.配置应用的 modules 属性开启gii,通常来讲在 config/web.php 文件,这里放在了后台的config文件夹下的main-local.php中,如图:
2.检查应用的入口脚本 web/index.php, 将看到这行代码将 YII_ENV_DEV 设为 true:
使用
1.生成模型
场景
1.主要用于数据验证和自定义数据验证
2.使用方式
// 场景作为属性来设置
$model = new User;
$model->scenario = 'login';
// 场景通过构造初始化配置来设置
$model = new User(['scenario' => 'login']);
3.场景申明
在模型里面定义scenarios方法来申明场景
public function scenarios()
{
return [
'场景名'=>[场景作用的字段名];
'create' => ['username', 'password', 'realname', 'status', 'role', 'avatar', 'sex', 'tel'],//添加
'update' => ['realname', 'status', 'role', 'avatar', 'sex', 'tel'],//修改
];
}
有时你想一条规则只在某个 场景 下应用,为此你可以指定规则的 on 属性, 如下所示:
如果没有指定 on 属性,规则会在所有场景下应用, 在当前scenario 下应用的规则称之为 active rule活动规则。
public function rules()
{
return [
[['username', 'email', 'password'], 'required', 'on' => 'register'],
];
}
密码加密
Yii 提供了两个帮助函数以让使用 crypt 来进行安全的哈希密码生成和验证更加容易。
//注册时加密,$password用户注册时提交的密码生成的秘钥
$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
//在验证时,解密$password用户在登录时提交的密码,$hash存储在数据库的秘钥
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
//密码匹配成功
} else {
密码匹配错误
}
核心验证器验证规则
规则 | 作用 |
---|---|
required | 不能为空 |
boolean | 字段类型为boolean型 |
compare | 检查 “password” 属性的值是否与 “password_repeat” 的值相同 |
compareAttribute | 指定了需要对比的属性字段是password_repeat |
字段是否为有效的邮箱地址 | |
exist | 字段的存在性 |
file | 字段是否为文件 |
extensions | 上传文件所允许的文件扩展名 |
filter | 过滤 |
image | 图片 |
ip | Ip地址 |
in | 范围 |
integer | 是否为整数 |
match | 匹配正则 |
number | 数字 |
string | 字符串 |
trim | 过滤空格 |
unique | 唯一性 |
url | 网址 |
trim | 过滤空格 |
缓存
注册缓存组件(common/config/main.php)
注册缓存组件
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',//配置缓存(缓存存储器有很多种)
],
调用缓存
$cache= Yii::$app->cache;
1.数据缓存
//数据缓存和读取的一些方式
get():通过一个指定的键(key)从缓存中取回一项数据。 如果该项数据不存在于缓存中或者已经过期/失效,则返回值 false。
1.set():将一个由键指定的数据项存放到缓存中。
2.add():如果缓存中未找到该键,则将指定数据存放到缓存中。
3.getOrSet():返回由键指定的缓存项,或者执行回调函数,把函数的返回值用键来关联存储到缓存中, 最后返回这个函数的返回值。
4.multiGet():由指定的键获取多个缓存数据项。
5.multiSet():一次存储多个数据项到缓存中,每个数据都由一个键来指明。
6.multiAdd():一次存储多个数据项到缓存中,每个数据都由一个键来指明。 如果某个键已经存在,则略过该数据项不缓存。
7.exists():返回一个值,指明某个键是否存在于缓存中。
8.delete():通过一个键,删除缓存中对应的值。
9.flush():删除缓存中的所有数据。