Yii源码解读-别名

niecprea

Alias

设置别名的目的:特殊的变量常量

yii\BaseYii::$aliases保存整个Yii应用的所有别名。

yii\base\Application的构造函数__construct()中调用preInit方法,该方法预定义了5个别名:

@app , @vendor @bower @npm , @runtime 

在Web应用,yii\base\Web\Application中又定义了2个别名:

@webroot @web 

最后一个藏有别名的地方:

@verdor/yiisoft/extensions.php

这一部分的别名会在yii\base\Application::bootstrap()中注册完成。

定义与解析别名

Yii::$aliases[]来保存别名

Yii::setAlias('@alias', 'path')来定义别名。

这个定义的本质是:BaseYii::setAlias()

Yii::getAlias()来调用别名。

别名的解析过程

  • 先按根别名找到可能保存别名的分支。

  • 遍历这个分支下的所有树叶,优先匹配长别名。

  • 将找到的最长匹配别名替换成其所对应的值,再接上 @alias 的后半截,成为新的别名。

Summary

  • 别名需在使用前定义,因此通常来讲,定义别名应当在放在应用的初始化阶段。

  • 别名必然以 @ 打头。

  • 别名的定义可以使用之前已经定义过的别名。

  • 别名在储存时,至多只分成两级,第一级的键是根别名。 第二级别名的键是完整的别名,而不是去除根别名后剩下的所谓的“二级”别名。

  • Yii通过分层的树结构来保存别名最主要是为高效检索作准备。

  • 很多地方可以直接使用别名,而不用调用 Yii::getAlias() 转换成真实的路径或URL。

  • 别名解析时,优先匹配较长的别名。

  • Yii预定义了许多常用的别名供编程时使用。

  • 使用别名时,要将别名放在最前面,不能放在中间。

参考

  1. http://www.digpage.com/convention.html

阅读 1.6k

ThinkingPool
Y1RReE5qazFOVFl5

Hello world!

856 声望
54 粉丝
0 条评论
你知道吗?

Hello world!

856 声望
54 粉丝
宣传栏