• 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
    $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 yiiwebCookie([
        '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内置的通过异常形式返回状态码
    yiiwebBadRequestHttpException: status code 400.
    yiiwebConflictHttpException: status code 409.
    yiiwebForbiddenHttpException: status code 403.
    yiiwebGoneHttpException: status code 410.
    yiiwebMethodNotAllowedHttpException: status code 405.
    yiiwebNotAcceptableHttpException: status code 406.
    yiiwebNotFoundHttpException: status code 404.
    yiiwebServerErrorHttpException: status code 500.
    yiiwebTooManyRequestsHttpException: status code 429.
    yiiwebUnauthorizedHttpException: status code 401.
    yiiwebUnsupportedMediaTypeHttpException: status code 415.
    
    抛出其他Status Code
    throw new yiiwebHttpException(402); //如果系统没有,可以通过HttpException自己写状态码
    throw new yiiwebHttpException(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 yiidbQuery());
    //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 yiidbQuery)->from('user')->exists();
    
    获取count
    $query->count();
    
    获取一个值
    $query->scalar();
    
    获取一列值
    $query->column(); //一位数组
    

    一个例子

    获取一个user表的内容
    $query = new yiidbQuery;
    $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)
    
    参考:

    1.http://nai8.me/tool-sc.html

  • 相关阅读:
    timeouts _ golang
    select.go
    channel directions _ golang
    channel synchronization _ golang
    channel _ buffering
    servlet:共享资源造成的线程冲突
    java:多线程的 共享资源冲突问题
    jsp:通过过滤器进行网页的资源管理
    jsp:通过Session控制登陆时间和内部页面的访问
    java:数据结构
  • 原文地址:https://www.cnblogs.com/lilongsy/p/6640369.html
Copyright © 2020-2023  润新知