Yii2基本使用汇总

安装

安装yii2初级程序

composer global require "fxp/composer-asset-plugin:^1.2.0"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic

安装yii2高级模板程序

composer global require "fxp/composer-asset-plugin:^1.2.0"
composer create-project --prefer-dist yiisoft/yii2-app-advanced yii-application
/path/to/php-bin/php /path/to/yii-application/init

详情参考GitHub官网

通过composer.json安装扩展

composer install

更新本地composer扩展库

composer update

直接安装某个composer扩展

composer require [options] [--] [vendor/packages]...

DAO

Yii的数据库读取对象,在PDO之上,DAO后有了Query Builder和AR

基本使用方法

获得数据库连接

$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

日志功能

基本用法

trace

Yii::trace($message,$category) //记录一条消息去跟踪一段代码是怎样运行的。这主要在开发的时候使用。

info

Yii::info($message,$category) //记录一条消息来传达一些有用的信息。

warning

Yii::warning($message,$category) //记录一个警告消息用来指示一些已经发生的意外。

error

Yii::error($message,$category) //记录一个致命的错误,这个错误应该尽快被检查。

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){
    return date('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 here
        return $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

throw new \yii\web\HttpException(402); //如果系统没有,可以通过HttpException自己写状态码
throw new \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!';

ActiveForm

重点!列出最常用的ActiveForm方法。

Html

通过Html类的一些静态方法生成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=1 AND id=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', (new Query())->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();

FileHelper

几个常用也好用的文件帮助方法

基本方法

// 遍历一个文件夹下文件&子文件夹
FileHelper::findFiles('/path/to/search/');
FileHelper::findFiles('.', ['only' => ['*.php', '*.txt']]); // 只返回php和txt文件
FileHelper::findFiles('.', ['except' => ['*.php', '*.txt']]); // 排除php和txt文件
// 获得指定文件的MIME类型
FileHelper::getMimeType('/path/to/img.jpeg');
// 复制文件夹
FileHelper::copyDirectory($src, $dst, $options = [])
// 删除一个目录及内容
FileHelper::removeDirectory($dir, $options = [])
// 生成一个文件夹(同时设置权限)
FileHelper::createDirectory($path, $mode = 0775, $recursive = true)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yii 2.0 权威指南 本教程的发布遵循 Yii 文档使用许可. 版权所有 2014 (c) Yii Software LLC. 介绍 已定稿 关于 Yii 已定稿 从 Yii 1.1 升级 入门 已定稿 安装 Yii 已定稿 运行应用 已定稿 第一次问候 已定稿 使用 Forms 已定稿 玩转 Databases 已定稿 用 Gii 生成代码 已定稿 更上一层楼 应用结构 已定稿 结构概述 已定稿 入口脚本 已定稿 应用 已定稿 应用组件 已定稿 控制器(Controller) 已定稿 视图(View) 已定稿 模型(Model) 已定稿 过滤器 已定稿 小部件(Widget) 已定稿 模块(Module) 已定稿 前端资源(Asset) 已定稿 扩展(extensions) 请求处理 已定稿 运行概述 已定稿 引导(Bootstrapping) 已定稿 路由(Route)引导与创建 URL 已定稿 请求(Request) 已定稿 响应(Response) 已定稿 Sessions(会话)和 Cookies 已定稿 错误处理 已定稿 日志 关键概念 已定稿 组件(Component) 已定稿 属性(Property) 已定稿 事件(Event) 已定稿 行为(Behavior) 已定稿 配置(Configurations) 已定稿 类自动加载(Autoloading) 已定稿 别名(Alias) 已定稿 服务定位器(Service Locator) 已定稿 依赖注入容器(DI Container) 配合数据库工作 编撰中 数据访问对象(DAO) - 数据库连接、基本查询、事务和模式操作 编撰中 查询生成器(Query Builder) - 使用简单抽象层查询数据库 编撰中 活动记录(Active Record) - 活动记录对象关系映射(ORM),检索和操作记录、定义关联关系 编撰中 数据库迁移(Migration) - 在团体开发中对你的数据库使用版本控制 待定中 Sphinx 待定中 Redis 待定中 MongoDB 待定中 ElasticSearch 接收用户数据 编撰中 创建表单 已定稿 输入验证 编撰中 文件上传 待定中 多模型同时输入 显示数据 编撰中 格式化输出数据 待定中 分页(Pagination) 待定中 排序(Sorting) 编撰中 数据提供器 编撰中 数据小部件 编撰中 主题 安全 编撰中 认证(Authentication) 编撰中 授权(Authorization) 编撰中 处理密码 待定中 客户端认证 待定中 安全领域的最佳实践 缓存 已定稿 概述 已定稿 数据缓存 已定稿 片段缓存 已定稿 分页缓存 已定稿 HTTP 缓存 RESTful Web 服务 已定稿 快速入门 已定稿 资源 已定稿 路由 已定稿 格式化响应 已定稿 授权验证 已定稿 速率限制 已定稿 版本化 已定稿 错误处理 已定稿 测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值