Yii2 速查表
Composer
- 安装yii程序
1 | composer create-project --prefer-dist yiisoft/yii2-app-basic basic |
- 通过
composer.json
安装扩展
1 | composer install |
- 更新本地
composer
扩展库
1 | composer update |
- 直接安装某个
composer
扩展
1 | composer require [options] [--] [vendor/packages]... |
DAO
Yii的数据库读取对象,在PDO之上,DAO后有了Query Builder和AR
- 获得数据库连接
1 | $conn = Yii::$app->db; |
- 执行数据库查询语句
1 | Yii::$app->db->createCommand("SELECT * FROM `user`"); |
- SQL语句插入数据
1 | Yii::$app->db |
- 数组形式插入数据
1 | Yii::$app->db->createCommand()->insert('user', [ |
- 批量插入数据
1 | Yii::$app->db->createCommand()->batchInsert('user', ['email', 'password', 'first_name'],[ |
- 更新数据
1 | Yii::$app->db->createCommand()->update('user', ['updated_at' => time()], 'id = 2')->execute(); |
- 删除数据
1 | Yii::$app->db->createCommand()->delete('user', 'id = 3')->execute(); |
- 获取所有数据(数组形式返回)
1 | Yii::$app->db->createCommand("SELECT * FROM `user`")->queryAll(); |
- 获取一条数据(一维数组)
1 | Yii::$app->db->createCommand("SELECT * FROM `user` WHERE id = 1")->queryOne(); |
- 获取一个值
1 | Yii::$app->db->createCommand("SELECT count(*) AS total FROM `user` WHERE id = 1")->queryScalar(); |
- 获取某一列(放到一位数组中)
1 | Yii::$app->db->createCommand("SELECT username FROM `user`")->queryColumn(); |
Logging
trace
1 | Yii::trace($message,$category) |
info
1 | Yii::info($message,$category) |
warning
1 | Yii::warning($message,$category) |
error
1 | Yii::error($message,$category) |
Validator
数据验证,最常用于模型的
rules()
函数
required
必须值
1 | ["username",'required'] |
Email
验证
1 | ["email",'email'] |
Boolean
验证
1 | ['sex', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true];// 可以认为置顶 true / false 值。 |
captcha
验证码
1 | ['verificationCode', 'captcha']; |
compare
比较
1 | ['username', 'compare', 'compareAttribute' => 'province','message'=>'username和province必须一样'] //错误信息将提示给username |
date
验证
1 | ["birth","date","format"=>"Y-m-d"] |
default
验证
1 | ['age','default','value'=>null] // 当age为空的时候设置为null |
double/number
验证
1 | ['v','double'] // 判断v是否为数字 |
- 数组各元素验证
1 | /* 要求验证的元素必须为数组,否则会返回假并报错 */ |
exist
是否存在验证
1 | /* 所谓对存在的检查实质为where的与操作,必须同时满足的记录存在方可。兄弟们可以研究下,exist是对sql语句EXISTS的应用*/ |
- file验证
1 | /* maxFiles代表一次最多传几个,mimeTypes代表上传文件类型 */ |
filter
过滤验证函数
1 | [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true], |
image
验证
1 | /* 上传png/jpg格式,最大宽度不能超过1000px,最小宽度不能低于100px,最大高度不能高于1000px。最小高度不能低于100px */ |
ip
验证
1 | ["ip_addess","ip"] |
in
方法验证
1 | ["level","in","range"=>[1,2,3]] |
integer
验证
1 | ["age",'integer']; |
- 正则匹配验证
1 | ["username","match","pattern"=>"/^[a-z]\w*$/i"] |
in
方法验证
1 | ["level","in","range"=>[1,2,3]] |
safe
验证(多用于设置一个model的attribute)
1 | ["description","safe"] |
string
验证
1 | ["username","string","length"=>[4,24]]; |
unique
唯一验证
1 | ["username","unique"] |
url
验证
1 | ["website","url"] |
String
- 一个字符串中单词数量
1 | StringHelper::countWords("hello world"); // 2 |
- 返回路径中的文件名部分
1 | StringHelper::basename("/path/hello.txt",".txt"); // hello |
- 返回路径中的目录名
1 | StringHelper::dirname("/home/path/hello.txt");// /home/path |
- 超出内容用…代替(不含HTML)
1 | StringHelper::truncate("hello world",7,'...'); //hello w... |
- 超出内容用…代替(识别HTML)
1 | StringHelper::truncate("hello world",7,'...',null,true); // hello w... |
- 以单词为单位超出部分用..代替(不解析HTML)
1 | StringHelper::truncateWords('This is a test sentance', 4, '...') //This is a test ... |
- 以单词为单位超出部分用..代替(解析HTML)
1 | StringHelper::truncateWords('This is a test for a sentance', 5, '...',true) //This is a test for... |
- 一个字符串是否以另一个字符串开始
1 | StringHelper::startsWith("hello world","he"); // true |
- 一个字符串是否以另一个字符串结尾
1 | StringHelper::endsWith("hello world","ald");//false |
- 按照分隔符分隔字符串为数组
1 | StringHelper::explode('It, is, a first, test'));//['It','is','a first','test'] |
Session&Cookie
Session
被封装成一个应用组件,直接通过Yii::$app->session
来访问;Cookie
通过Request和Response来操作。
Session
- 获得session
1 | $session = Yii::$app->session; |
- 检查session是否开启
1 | Yii::$app->session->isActive |
- 开启一个
session
1 | Yii::$app->session->open() |
- 关闭
session
1 | Yii::$app->session->close(); |
- 销毁
session
中所有已注册的数据
1 | Yii::$app->session->destroy(); |
- 访问一个
session
1 | /* 以下三种方法效果等同 */ |
- 设置一个
session
1 | /* 以下三种方法效果等同 */ |
- 删除一个
session
变量
1 | /* 下面三种方法效果等同 */ |
- 检查一个
session
变量是否存在
1 | /* 以下三种方法效果一致 */ |
Cookie
- 获取
cookie
1 | $cookies = Yii::$app->request->cookies; |
- 设置
cookie
1 | $cookies = Yii::$app->response->cookies; |
- 获取一个
cookie
值
1 | $language = $cookies->getValue('language', 'en');// 如果获取language失败,则返回"en"代替 |
- 另一种获取
cookie
值方法
1 | if (($cookie = $cookies->get('language')) !== null) { |
- 数组方式获取
cookie
值
1 | if (isset($cookies['language'])) { |
- 检查一个
cookie
是否存在
1 | if ($cookies->has('language')) ... |
- 新增一个
cookie
1 | $cookies->add(new \yii\web\Cookie([ |
- 删除一个
cookie
1 | $cookies->remove('language'); |
Request
Request
被配置为一个应用组件,我们可以通过Yii::$app->request
访问它。
URL相关
- 获得当前请求的绝对
url
1 | Yii::$app->request->getAbsoluteUrl(); |
- 返回一个请求URL的
hostInfo
部分
1 | Yii::$app->request->getHostInfo(); |
- 获得URL问号后的参数字符串
1 | Yii::$app->request->getQueryString() |
- 返回服务器端口
1 | Yii::$app->request->getServerPort(); |
HTTP头
- 返回用户接受的内容类型
1 | Yii::$app->request-> getAcceptableContentTypes (); // Header Accept |
- 返回用户可接受的语言
1 | Yii::$app->request-> getAcceptableLanguages(); // Header Accept-Language |
- 返回
GET
/POST
请求
1 | Yii::$app->request->get(); |
- 判断请求类型(返回boolean)
1 | Yii::$app->request->isAjax // 判断是否为ajax请求 |
- 返回用户的 IP
1 | Yii::$app->request->getUserIP(); |
Response
和Request一样,Response被封装成Yii的一个组件,你可以通过
Yii::$app->response
轻松的访问它。
Status Code状态码
- 设置一个
Status Code
1 | Yii::$app->response->statusCode = 200; |
- Yii内置的通过异常形式返回状态码
1 | yii\web\BadRequestHttpException: status code 400. |
HTTP Headers
- 添加设置删除
Http Headers
内容
1 | $headers = Yii::$app->response->headers; |
Response Body
- 相应主体
1 | Yii::$app->response->content = 'hello world!'; |
Controller
控制器,可在
action
内直接用$this
调用。
- 渲染一个视图(如果布局有效则使用布局)
1 | $this->render('index', ['model' => $model]) |
- 渲染视图(不使用布局)
1 | $this->renderPartial('index',['model'=>$model]) |
- 渲染视图(不使用布局)
1 | // 注入所有注册的JS/CSS脚本和文件,通常使用在响应AJAX网页请求的情况下 |
- 只渲染布局
1 | $this->renderContent($content); |
ActiveForm
重点!列出最常用的ActiveForm方法。
- 取消客户端规则验证
1 | $form = ActiveForm::begin([ |
- 取消
yii.js
的引入
1 | $form = ActiveForm::begin([ |
- 表单目标地址设置
1 | $form = ActiveForm::begin([ |
- GET & POST 方法设置
1 | $form = ActiveForm::begin([ |
- 设置Form的类及自己定义标签属性
1 | $form = ActiveForm::begin([ |
- 生成文本框
1 | $form->field($model, 'date')->textInput(["key"=>"value"]); |
- 生成文本域
1 | $form->field($model, 'date')->textarea(["key"=>"value"]); |
- 单选列表
1 | $form->field($model,'sex')->radioList($arr,["key"=>"value"]); |
- 密码框
1 | $form->field($model,"password")->passwordInput(); |
- 复选框
1 | $form->field($model,"city_id")->checkboxList($arr); |
- 文件上传
1 | $form->field($model,"image")->fileInput(); |
- 隐藏域
1 | $form->field($model,"name")->hiddenInput(); |
FileHelper
几个常用也好用的文件帮助方法
- 遍历一个文件夹下文件&子文件夹
1 | FileHelper::findFiles('/path/to/search/'); |
- 获得指定文件的MIME类型
1 | FileHelper::getMimeType('/path/to/img.jpeg'); |
- 复制文件夹
1 | FileHelper::copyDirectory($src, $dst, $options = []) |
- 删除一个目录及内容
1 | FileHelper::removeDirectory($dir, $options = []) |
- 生成一个文件夹(同时设置权限)
1 | FileHelper::createDirectory($path, $mode = 0775, $recursive = true) |
UploadedFile
上传文件帮助类
- 通过模型的属性获取一个文件
1 | $file = UploadedFile::getInstance($model,'avatar') |
- 通过模型的属性来获取一组文件
1 | $files = UploadedFile::getInstances($model,'avatar') |
- 通过名字上传一个文件
1 | $file = UploadedFile::getInstanceByName('avatar'); |
- 通过名字获取一组上传的文件
1 | $file = UploadedFile::getInstancesByName('avatar'); |
- 保存一个文件
1 | $file->saveAs(Yii::getAlias("@webroot").'/data/test.jpg'); |
- 获取上传文件原始名(不含扩展名)
1 | $file->getBaseName(); // test.jpg ===> test |
- 获取上传文件的扩展名(已经自动格式化为小写)
1 | $file->getExtension(); // 是png、不是image/png |
- 获取文件的原始名
1 | $file->name; // test.jpg |
- 获取文件媒体类型
1 | $file->type; // image/png |
- 获取文件临时名
1 | $file->tempName; |
- 获取文件大小
1 | $file->size; // 21744 |
Html
通过Html类的一些静态方法生成Html标签。
- 生成一个超级链接
1 | Html::a('链接的文本', $url); |
- 通过Yii2的路由生成一个链接
1 | Html::a('链接文本', Url::to(['/site/index'], true)); |
- 生成一个图片链接
1 | Html::img("/images/logo.png",['class'=>'img']); |
- 生成一个按钮
1 | Html::button("按钮文本",['class'=>'button-action']); |
- 发送邮件链接
1 | Html::mailto("阿北",'abei@nai8.me',$options); |
- 生成有序列表
1 | $list = ['china','usa']; |
- 生成无须列表
1 | $list = ['china','usa','japan']; |
- 生成
javascript
代码
1 | Html::script("alert('hello world');") |
- 生成
style
代码
1 | Html::style("color:#F60"); |
- 生成一个css引用链接
1 | Html::cssFile("http://baidu.com/style.css",[]); |
- 生成一个js文件引用
1 | Html::jsFile($url,[]); |
- 把字符 “<” (小于)和 “>” (大于)转换为HTML实体
1 | Html::encode($html); |
- 将特色的HTML实体转化为>和<
1 | Html::decode($string); |
Query Builder
主要解决DAO在查询语句上的繁琐问题,无需输入原生SQL语句就可以完成数据库检索。
- 使用
Query Builder
需要使用的类
1 | $query = (new \yii\db\Query()); // yii2使用Query对象来采集SQL的各个部分,然后由Query Builder组成SQL语句后由DAO发给数据库获得请求。 |
SELECT
方法
1 | $query->select("id,username"); // 字符串形式 |
FROM
方法
1 | $query->from("user"); // 字符串形式 |
- 过滤掉重复记录
1 | $query->select("username")->distinct()->from("user"); // distinct |
WHERE
函数用法
1 | /* 传递字符串 */ |
- 一个要单独说明的
exists
1 | /* EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False */ |
ORDER BY
方法
1 | $query->orderBy("id DESC"); |
GROUP BY
&&HAVING
1 | $query->groupBy(["username"]); |
- 获取生成的SQL语句
1 | $query->createCommand()->sql; |
获得查询结果
- 获取所有结果
1 | $query->all();// 二位数组 |
- 获取一条记录
1 | $query->one(); |
- 检查一个数据库中是否含有某个表
1 | (new \yii\db\Query)->from('user')->exists(); |
- 获取
count
1 | $query->count(); |
- 获取一个值
1 | $query->scalar(); |
- 获取一列值
1 | $query->column(); // 一位数组 |
- 获取一个user表的内容
1 | $query = new \yii\db\Query; |
Migrate
- 生成一个迁移文件
1 | ./yii migrate/create script_name // script_name为脚本名字(需要英文格式) |
- 执行所有没有迁移的脚本
1 | ./yii migrate |
- 执行置顶的迁移
1 | ./yii migrate/up 脚本名 // 不用含有扩展名 |
Asset Management
Asset资源管理
- 类属性说明
1 | $basePath // 资源文件所在的web服务器目录路径,一般为@webroot |
- 去掉浏览器缓存
1 | 'appendTimestamp' => true // 在web.php里的components - assetManager |
- 发布资源筛选
1 | public $publishOptions = [ |
- js文件在页面的位置
1 | public $jsOptions = ['position' => \yii\web\View::POS_HEAD];//js文件发布到head标签内 |
- 浏览器兼容问题
1 | public $cssOptions = ['condition' => 'IE 11'];// 代表兼容ie11 |
- 是否使用符号链接
1 | 'linkAssets' => true // 在web.php里的components - assetManager |
- 配置yii自身的asset资源
1 | // 在web.php里的components - assetManager,配置自定义的也可以 |
Event
有关事件的所有,系统自带事件通通给你。
Application
- 应用处理请求
before
之前触发
1 | Application::EVENT_BEFORE_REQUEST |
- 应用处理请求
after
之后触发
1 | Application::EVENT_AFTER_REQUEST |
Controller
- 在每个
Action
运行之前触发
1 | Controller::EVENT_BEFORE_ACTION |
- 在每个Action运行之后触发
1 | Controller::EVENT_AFTER_ACTION |
Model
- 在验证Model属性之前触发
1 | Model::EVENT_BEFORE_VALIDATE |
- 在验证Model属性之后触发
1 | Model::EVENT_AFTER_VALIDATE |
Module
- 一个模块的Action运行前触发
1 | Module::EVENT_BEFORE_ACTION |
- 一个模块的Action运行后触发
1 | Module::EVENT_AFTER_ACTION |
View
- 执行视图的
beforePage
时触发
1 | View::EVENT_BEGIN_PAGE |
- 执行视图的
endPage
函数时触发
1 | View::EVENT_END_PAGE |
- 在
renderFile
渲染一个视图文件之前触发
1 | View::EVENT_BEFORE_RENDER |
- 在
renderFile
渲染一个视图文件之后触发
1 | View::EVENT_AFTER_RENDER |
- 执行视图的
beginBody
函数时触发
1 | View::EVENT_BEGIN_BODY |
- 执行视图的
endBody
函数时触发
1 | View::EVENT_END_BODY |
Widget
- Widget初始化时触发
1 | Widget::EVENT_INIT |
- Widget执行前触发
1 | Widget::EVENT_BEFORE_RUN |
- Widget执行之后触发
1 | Widget::EVENT_AFTER_RUN |
ActiveQuery
- 由ActiveQuery的init函数触发
1 | ActiveQuery::EVENT_INIT |
BaseActiveRecord & ActiveRecord
- AR对象被初始化init时触发
1 | BaseActiveRecord::EVENT_INIT |
- AR执行查询结束时触发
1 | BaseActiveRecord::EVENT_AFTER_FIND |
- 插入结束时触发
1 | BaseActiveRecord::EVENT_BEFORE_INSERT |
- 插入之后触发
1 | BaseActiveRecord::EVENT_AFTER_INSERT |
- 更新记录之前触发
1 | BaseActiveRecord::EVENT_BEFORE_UPDATE |
- 更新记录之后触发
1 | BaseActiveRecord::EVENT_AFTER_UPDATE |
- 删除记录之前触发
1 | BaseActiveRecord::EVENT_BEFORE_DELETE |
- 删除记录之后触发
1 | BaseActiveRecord::EVENT_AFTER_DELETE |
- 在数据refresh成功之后触发
1 | BaseActiveRecord::EVENT_AFTER_REFRESH |
Connection
- 数据库连接被打开后触发
1 | Connection::EVENT_AFTER_OPEN |
- 事务被启动时触发
1 | Connection::EVENT_BEGIN_TRANSACTION |
- 事务被提交后触发
1 | Connection::EVENT_COMMIT_TRANSACTION |
- 事务回滚后触发
1 | Connection::EVENT_ROLLBACK_TRANSACTION |
Response
- Response响应发送之前触发
1 | Response::EVENT_BEFORE_SEND |
- Response响应发送之后触发
1 | Response::EVENT_AFTER_SEND |
- Response响应内容准备好之后触发
1 | Response::EVENT_AFTER_PREPARE |
User
- 登陆之前触发
1 | User::EVENT_BEFORE_LOGIN |
- 登陆之后触发
1 | User::EVENT_AFTER_LOGIN |
- 注销之前触发
1 | User::EVENT_BEFORE_LOGOUT |
- 注销之后触发
1 | User::EVENT_AFTER_LOGOUT |
Route&UrlManager
- URL美化配置
1 | // conf/web.php |
- Apache开启url重写方法
1 | // Apache需要支持url重写其AllowOverride为all |
- Nginx支持url重写
1 | location / { |
- Apache开启url重写方法2
1 | RewriteEngine On |
RESTful
- 分页获得所有的会员
1 | GET /users |
- HTTP状态码
1 | 200: OK。一切正常。 |