PHP干货分享

YII2 框架 相关学习

2018-03-06  本文已影响32人  JUNE言JUNE语

不定期更新
【该文档在更新过程中可能会存在部分未完成的段落,请自行忽略】
资料参考自http://www.yiichina.com/doc/guide/2.0
感觉还是权威指南靠谱

2018-03-06

controller & action
yii2默认的controller跟action是按-分割的
每一个action的方法命名都是前缀为action
例如 controller/action为 MyIndexController/actionMyAction
那么请求的参数应该是?r=my-index/my-action

2018-03-07

Query
yii2Query内部的queryInternal内置了记录日志的代码

Command类中queryInternal方法
Yii::info($rawSql, 'yii\db\Command::query');

只需要在web.php中设置对应类别的日志输出即可

[
    'class' => 'yii\log\FileTarget',
    'levels' => ['info'],
    'logVars' => [],
    'categories' => ['yii\db\Command::execute'],
    'logFile' => '@runtime/logs/sql.log',
],

2018-03-19

setPathOfAlias

路径别名
Yii中使用了大量的路径别名,例如框架核心代码vendor的路径,运行日志runtime等等
一般情况下在开发的过程中,我们比较多使用的是获取对应的别名。
如何知道在当前系统上我们,直接在编辑器中全局搜索setPathOfAlias即可

image.png

toArray

yii2支持了Query中直接返回一个二维数组,相当于直接拆箱,不需要再手动封装一层getAttributes(),但是需要注意,避免使用习惯了所有的情况都使用asArray,还是需要根据实际情况去使用的,如果获取数据后直接修改更新,那么则不应该使用asArray方法

注 另外参考这里 http://www.yiichina.com/doc/guide/2.0/structure-models#fields

2018-03-20

Session

Yii框架已经封装了对Session的一系列操作,对应的对象获取在

Yii::$app->session;

一般建议使用该对象来操作session,原因是Yii框架已经对其进行了一定的封装,
当然,我们也可以基于该对象进行二次封装

信息
例如我们对session进行操作时需要提前开启session,否则会报错,但是使用Yii框架自带的则不需要考虑这个问题

log

  1. Yii框架封装
位置:\yii\BaseYii
function
getLogger() // 注 logger是一个单例 全局只有一个logger实例
setLogger()
trace()// 该方法只有开启YII_DEBUG且Level=Logger::LEVEL_TRACE才会记录
error()
warning()
info()
// 后面这两个是用于性能分析
beginProfile()
endProfile()

个人意见: 由于logger是全局单例,建议在项目中自己再封装多一层,方便后期如果针对日志有其他的需要补充时可以直接修改封装的方法

举个例子
Yii2 打开数据库查询日志
在 web.php文件中追加

[
    'class' => 'yii\log\FileTarget',
    'levels' => ['info', 'warning', 'error'],
    'logVars' => [],
    'categories' => ['yii\db\*'],
    'logFile' => '@runtime/logs/sql.log',
],

这样就可以指定所有跟DB相关的日志都记录到runtime下面的logs文件夹中的sql.log

另外,yii框架中的日志是不会实时写入的
logger object中的日志数量超过flushInterval,log
才会被刷新到log targets, 当对应的数量超过exportInterval时,才会被刷新到对应的target中(如写到log文件中)
或者是当一个请求结束,log也会被刷新到对应的target中

注意不是必要情况下不要修改flushInterval & exportInterval的值

数据库访问(DAO)

Model

batchInsert

Query

where

使用query 生成left join语句的时候,结果会按照ID去去重


2018-03-26

Controller

https://www.jianshu.com/writer#/notebooks/8443116/notes/25740768

2018-09-02

好久没更新了

ArrayHelper

这是一个蛮好用的数组工具类
一般情况下数组日常使用的功能内置函数基本都能提供,例如array_column,array_keys,array_value,array_multisort等等

但是涉及到复杂的数组排序(ArrayHelper::multisort),多维数组取值(ArrayHelper::getValue), 整行获取(ArrayHelper::getColumn)

上一篇下一篇

猜你喜欢

热点阅读