YII2.0.11速查表

Composer

基本用法

// 安装yii程序

composercreate-project--prefer-dist yiisoft/yii2-app-basic basic

// 通过composer.json安装扩展

composerinstall

// 更新本地composer扩展库

composerupdate

// 直接安装某个composer扩展

composerrequire[options][--][vendor/packages]...

DAO

基本使用方法

// 获得数据库连接

$conn = Yii::$app->db;

// 执行数据库查询语句

Yii::$app->db->createCommand("SELECT * FROM `user`");Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid",[":uid"=>1]);Yii::$app->db->createCommand("SELECT * FROM `user` WHERE uid=:uid")->addValue([":uid"=>1]);

// SQL语句插入数据

Yii::$app->db->createCommand('INSERT INTO user (email, password) VALUES("test3@example.com", "test3");')->execute();

// 数组形式插入数据

Yii::$app->db->createCommand()->insert('user', ['email'=>'test4@example.com','password'=>'changeme7','first_name'=>'Test'])->execute();

// 批量插入数据

Yii::$app->db->createCommand()->batchInsert('user', ['email','password','first_name'],[['james.franklin@example.com','changeme7','James'],['linda.marks@example.com','changeme7','Linda']['roger.martin@example.com','changeme7']])->execute();

// 更新数据

Yii::$app->db->createCommand()->update('user', ['updated_at'=> time()],'id = 2')->execute();

// 删除数据

Yii::$app->db->createCommand()->delete('user','id = 3')->execute();

获取结果方法

// 获取所有数据(数组形式返回)

Yii::$app->db->createCommand("SELECT * FROM `user`")->queryAll();

// 获取一条数据(一维数组)

Yii::$app->db->createCommand("SELECT * FROM `user` WHERE id = 1")->queryOne();

// 获取一个值

Yii::$app->db->createCommand("SELECT count(*) AS total FROM `user` WHERE id = 1")->queryScalar();

// 获取某一列(放到一位数组中)

Yii::$app->db->createCommand("SELECT username FROM `user`")->queryColumn();

Logging

日志功能

Validator

数据验证,最常用于模型的rules()函数

方法列表(Model中rules函数)

// required 必须值

["username",'required'][["username","email"],'required'][["username"],'required',"message"=>"{attribute}必须填写"][["username"],'required','requiredValue'=>"abei"]// 用户填写的值必须等于requiredValue才能通过验证。

// Email验证

["email",'email'][["email","work_email"],'email']

// Boolean验证

['sex','boolean','trueValue'=>true,'falseValue'=>false,'strict'=>true];// 可以认为置顶 true / false 值。

// captcha验证码

['verificationCode', 'captcha'];

// compare比较

['username','compare','compareAttribute'=>'province','message'=>'username和province必须一样']//错误信息将提示给username['age','compare','compareValue'=>30,'operator'=>'>=','type'=>'number'];//compareValue:比较常量值 operator:比较操作符 type为值类型,默认为string,会一个每个字符对比,若为number则直接判断数值// operator 待选值==、===、!=、!==、>、>=、<、<=

// date验证

["birth","date","format"=>"Y-m-d"]

// default验证

['age','default','value'=>null]// 当age为空的时候设置为null['country','default','value'=>'USA']// 当 country为空时设置为USA/* 如果from为空,则=今天+3天,如果to为空,则=今天+6天 */[['from','to'],'default','value'=>function($model,$attribute){returndate('Y-m-d', strtotime($attribute ==='to'?'+3 days':'+6 days'));}]

// double/number验证

['v','double']// 判断v是否为数字['v','double','max'=>90,'min'=>1]//判断v是否为数字且大于等于1、小于等于90

// 数组各元素验证

/* 要求验证的元素必须为数组,否则会返回假并报错 */["categoryIds","each","rule"=>['integer']]

// exist是否存在验证

/* 所谓对存在的检查实质为where的与操作,必须同时瞒住的记录存在方可。兄弟们可以研究下,exist是对sql语句EXISTS的应用*/["username","exist"]// username输入的值已经存在["username","exist","targetAttribute"=>"province"]// username的输入值必须在province列存在["username","exist",'targetAttribute'=> ['username','province']]// username的输入值必须在username和province中存在[["username","province"],"exist",'targetAttribute'=> ['username','province']]// username和province的输入值必须在username和province中存在

// file验证

/* maxFiles代表一次最多传几个,mimeTypes代表上传文件类型 */['primaryImage','file','extensions'=> ['png','jpg','gif'],'mimeTypes'=>["image/*"],'maxSize'=>1024*1024,'minSize'=>100*1024,'maxFiles'=>6,'checkExtensionByMimeType'=>true],

// filter过滤验证函数

[['username','email'],'filter','filter'=>'trim','skipOnArray'=>true],['phone','filter','filter'=>function($value){// normalize phone input herereturn$value;}],

// image验证

/* 上传png/jpg格式,最大宽度不能超过1000px,最小宽度不能低于100px,最大高度不能高于1000px。最小高度不能低于100px */['primaryImage','image','extensions'=>'png, jpg','minWidth'=>100,'maxWidth'=>1000,'minHeight'=>100,'maxHeight'=>1000]

// ip验证

["ip_addess","ip"]

// in方法验证

["level","in","range"=>[1,2,3]]

// integer验证

["age",'integer'];["age","integer","max"=>90,"min"=>1]

// 正则匹配验证

["username","match","pattern"=>"/^[a-z]\w*$/i"]

// safe验证(多用于设置一个model的attribute)

["description","safe"]

// string验证

["username","string","length"=>[4,24]];["username","string","min"=>4];["username","string","max"=>32];["username","string","encoding"=>"UTF-8"];

// unique唯一验证

["username","unique"]["username","unique","targetAttribute"=>"province"]

// url验证

["website","url"]["website","url","validSchemes"=>["http","https"]]

Session&Cookie

Session被封装成一个应用组件,直接通过Yii::$app->session来访问;Cookie通过Request和Response来操作。

Session

// 获得session

$session = Yii::$app->session;

// 检查session是否开启

Yii::$app->session->isActive

// 开启一个session

Yii::$app->session->open()

// 关闭session

Yii::$app->session->close();

// 销毁session中所有已注册的数据

Yii::$app->session->destroy();

// 访问一个session

/* 以下三种方法效果等同 */$language = $session->get('language');$language = $session['language'];$language =isset($_SESSION['language']) ? $_SESSION['language'] :null;

// 设置一个session

/* 以下三种方法效果等同 */$session->set('language','en-US');$session['language'] ='en-US';$_SESSION['language'] ='en-US';

// 删除一个session变量

/* 下面三种方法效果等同 */$session->remove('language');unset($session['language']);unset($_SESSION['language']);

// 检查一个session变量是否存在

/* 以下三种方法效果一致 */if($session->has('language')) ...if(isset($session['language'])) ...if(isset($_SESSION['language'])) ...

Cookie

// 获取cookie

$cookies = Yii::$app->request->cookies;

// 设置cookie

$cookies = Yii::$app->response->cookies;

// 获取一个cookie值

$language = $cookies->getValue('language','en');// 如果获取language失败,则返回"en"代替

// 另一种获取cookie值方法

if(($cookie = $cookies->get('language')) !==null) {    $language = $cookie->value;}

// 数组方式获取cookie值

if(isset($cookies['language'])) {    $language = $cookies['language']->value;}

// 检查一个cookie是否存在

if($cookies->has('language')) ...if(isset($cookies['language'])) ...

// 新增一个cookie

$cookies->add(new\yii\web\Cookie(['name'=>'language','value'=>'zh-CN',]));

// 删除一个cookie

$cookies->remove('language');unset($cookies['language']);

Request

Request 被配置为一个应用组件,我们可以通过Yii::$app->request访问它。

URL相关

// 获得当前请求的绝对url

Yii::$app->request->getAbsoluteUrl();

// 返回一个请求URL的hostInfo部分

Yii::$app->request->getHostInfo();

// 获得URL问号后的参数字符串

Yii::$app->request->getQueryString()

// 返回服务器端口

Yii::$app->request->getServerPort();

HTTP头

// 返回用户接受的内容类型

Yii::$app->request-> getAcceptableContentTypes ();// Header Accept

// 返回用户可接受的语言

Yii::$app->request-> getAcceptableLanguages();// Header Accept-Language

// 返回GET/POST请求

Yii::$app->request->get();Yii::$app->request->get("id");Yii::$app->request->POST();Yii::$app->request->POST("username");

// 判断请求类型(返回boolean)

Yii::$app->request->isAjax// 判断是否为ajax请求Yii::$app->request->isConsoleRequest// 判断是否为控制发起的请求Yii::$app->request->isDelete// 判断是否为DELETE请求Yii::$app->request->isGet// 判断是否为GET请求Yii::$app->request->isPost// 判断是否为POST请求Yii::$app->request->isPjax// 判断是否为isPjax请求

客户端信息

// 返回用户的 IP

Yii::$app->request->getUserIP();

Response

和Request一样,Response被封装成Yii的一个组件,你可以通过Yii::$app->response轻松的访问它。

Status Code状态码

// 设置一个Status Code

Yii::$app->response->statusCode =200;

// Yii内置的通过异常形式返回状态码

yii\web\BadRequestHttpException: status code 400.yii\web\ConflictHttpException: status code 409.yii\web\ForbiddenHttpException: status code 403.yii\web\GoneHttpException: status code 410.yii\web\MethodNotAllowedHttpException: status code 405.yii\web\NotAcceptableHttpException: status code 406.yii\web\NotFoundHttpException: status code 404.yii\web\ServerErrorHttpException: status code 500.yii\web\TooManyRequestsHttpException: status code 429.yii\web\UnauthorizedHttpException: status code 401.yii\web\UnsupportedMediaTypeHttpException: status code 415.

// 抛出其他Status Code

thrownew\yii\web\HttpException(402);// 如果系统没有,可以通过HttpException自己写状态码thrownew\yii\web\HttpException(402,"message");

HTTP Headers

// 添加设置删除Http Headers内容

$headers = Yii::$app->response->headers;// add a Pragma header. Existing Pragma headers will NOT be overwritten.$headers->add('Pragma','no-cache');// set a Pragma header. Any existing Pragma headers will be discarded.$headers->set('Pragma','no-cache');// remove Pragma header(s) and return the removed Pragma header values in an array$values = $headers->remove('Pragma');

Response Body

// 相应主体

Yii::$app->response->content ='hello world!';

Html

生成Html标签方法

// 生成一个超级链接

Html::a('链接的文本', $url);

// 通过Yii2的路由生成一个链接

Html::a('链接文本', Url::to(['/site/index'],true));Html::a('链接文本', Yii::$app->urlManager->createUrl(['/site/index']));

// 生成一个图片链接

Html::img("/images/logo.png",['class'=>'img']);

// 生成一个按钮

Html::button("按钮文本",['class'=>'button-action']);

// 发送邮件链接

Html::mailto("阿北",'abei@nai8.me',$options);

// 生成有序列表

$list = ['china','usa'];Html::ol($list);

// 生成无需列表

$list = ['china','usa','japan'];Html::ul($list);

// 生成javascript代码

Html::script("alert('hello world');")

// 生成style代码

Html::style("color:#F60");Html::style(".list{background:#FFF;}");

文件引用及编码

// 生成一个css引用链接

Html::cssFile("http://baidu.com/style.css",[]);

// 生成一个js文件引用

Html::jsFile($url,[]);

// 把字符 "<" (小于)和 ">" (大于)转换为HTML实体

Html::encode($html);

// 将特色的HTML实体转化为>和<

Html::decode($string);

Alias

定义和使用

// 定义一个别名

Yii::setAlias('@baidu','http://www.baidu.com');

// 获得一个别名

Yii::getAlias($name);

// 获得Yii框架所在的目录

Yii::getAlias('@yii')

// 正在运行的应用的根目录

Yii::getAlias('@app')

// Composer第三方库所在目录

Yii::getAlias("@vendor")

// bower库所在位置

Yii::getAlias("@bower");

// npm库所在位置

Yii::getAlias("@npm");

// 运行时存放文件路径

Yii::getAlias("@runtime");

// index.php所在目录

Yii::getAlias("@webroot");

// 当前应用的根URL,主要用于前端。

Yii::getAlias("@web");

// 高级版-通用文件夹

Yii::getAlias("@common");

// 高级版-前台应用所在位置

Yii::getAlias("@frontend");

// 高级版-后台应用所在位置

Yii::getAlias("@backend");

// 命令行库所在位置

Yii::getAlias("@console");

Query Builder

主要解决DAO在查询语句上的繁琐问题,无需输入原生SQL语句就可以完成数据库检索。

基本用法

// 使用Query Builder需要使用的类

$query = (new\yii\db\Query());// yii2使用Query对象来采集SQL的各个部分,然后由Query Builder组成SQL语句后由DAO发给数据库获得请求。

// SELECT方法

$query->select("id,username");// 字符串形式$query->select(['id','username']);// 数组形式$query->select(["userId"=>"id","fName"=>"user.frist_name"]);// 起别名$query->select(["full_name"=>"CONCAT(id,'-',username)"]);// 支持MYSQL函数

// FROM方法

$query->from("user");// 字符串形式$query->from(["u"=>"user"]);// 数据表别名

// 过滤掉重复记录

$query->select("username")->distinct()->from("user");// distinct

// WHERE函数用法

/* 传递字符串 */$query->where("id = 1");$query->where("id = :id")->addParams([":id"=>1]);$query->where("id = :id",[":id"=>1]);/* 传递数组 */$query->where(["username"=>"abei","age"=>[20,19,26]])->from("user");// select * from user where username="abei" AND age in (20,19,26)/* 操作符 */$query->where([">","id",10]);// id > 10$query->where(["<","id",10]);// id < 10$query->where(["<>","id",10]);// id <> 10$query->where(["in","id",[10,12]]);// id in (10,20)$query->where(["not in","id",[10,12]]);// id not in (10,20)$query->where(["and","id=1","id=2"]); id=1ANDid=2$query->where(['or', ['type'=> [7,8,9]], ['id'=> [1,2,3]]]);// (type IN (7, 8, 9) OR (id IN (1, 2, 3)))$query->where(["between",'id',1,10]);// id between 1 AND 10$query->where(["not",["id"=>5]]);// not (id=5)$query->where(["not between","id",1,10]);// id not between 1 AND 10$query->where(["like","username","abei"]);// username like "%abei%"$query->where([['like','username', ['abei','liuhuan']]]);// username like "%abei%" AND username like "%liuhuan%"$query->where(['like','username','%abei',false]);// username like "%abei"$query->where(["or like",'username', ['abei','liuhuan']]);// username like "%abei%" OR username like "%liuhuan%",只作用于范围为数组的形式$query->where(["not like",xxxxx]);// 与like用法一致$query->where(["or not like",xxx])// 与not like用法一致

// 一个要单独说明的exists

/* EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False */$query->where(['exists', (newQuery())->select('id')->from('user')->where(['id'=>1])]);

// ORDER BY 方法

$query->orderBy("id DESC");$query->orderBy(["id"=>SORT_DESC]);$query->orderBy(["id"=>SORT_DESC,'create_time'=>SORT_ASC]);

// GROUP BY && HAVING

$query->groupBy(["username"]);$query->groupBy(["id"])->having([">",'id',20]);

// 获取生成的SQL语句

$query->createCommand()->sql;

获得查询结果

// 获取所有结果

$query->all();// 二位数组

// 获取一条记录

$query->one();

// 检查一个数据库中是否含有某个表

(new\yii\db\Query)->from('user')->exists();

// 获取count

$query->count();

// 获取一个值

$query->scalar();

// 获取一列值

$query->column();// 一位数组

一个例子

// 获取一个user表的内容

$query =new\yii\db\Query;$query->from("user");$query->select(["fname"=>"username"]);$query->where([">",'id',10]);$query->all();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,442评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,604评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,576评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,652评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,495评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,370评论 1 274
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,792评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,435评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,735评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,777评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,553评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,399评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,806评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,038评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,330评论 1 253
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,766评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,964评论 2 337

推荐阅读更多精彩内容