常用底层知识 - 别名 ¶
作者:KK
发表日期:2016.12.8
快速了解 ¶
和许多框架一样,Yii里有个叫alias
(别名)的概念
别名一般是将长的东西缩成一个短的标记来访问
,就这么说吧,@etc
可以用来代表C:\windows\system32\drivers\etc
文件夹这个路径,用以下代码来设置etc
这个别名
Yii::setAlias('etc', 'C:\windows\system32\drivers\etc');
这样@etc
就代表了一个完整的路径,以后要调用etc这个目录时你可以这样用:
echo Yii::getAlias('@etc');
你可能遇到报错了
测试上面的代码时我不排除你会遇到这个错误:
这其实跟别名没关系,如果你不熟悉命名空间的话,请注意在类的顶上加一句
use Yii;
来引用Yii类,不引用就不能用哦亲,自己上网恶补一下命名空间的知识吧
别名值不要用\
号结尾 ¶
但要注意当别名以\
号结束的时候,会被处理掉的,比如
Yii::setAlias('abc', 'C:\Windows\system32\');
echo Yii::getAlias('@abc'); // 最后的 \ 号不见了
别名解析自动拼接 ¶
还有,假设@path的值是/a/b/c
,那么Yii::getAlias('@path/x/y/z');
结果就会是/a/b/c/x/y/z
,原因是当Yii发现你没设置path/x/y/z
这个别名的时候,它会自动识别到你已经设置了path
这个别名,然后拼上/x/y/z
就能给出/a/b/c/x/y/z
了
系统自带的别名 ¶
框架自身会初始化一些别名,比如你试下执行这些:
print_r([
Yii::getAlias('@app'),
Yii::getAlias('@runtime'),
Yii::getAlias('@vendor'),
Yii::getAlias('@yii'),
]);
结果就类似这样:
这些就是系统自带的别名
通过别名来得到路径 ¶
如果你要读取配置目录下的web.php文件,那可尽量别写这样的代码:file_get_contents(__DIR__ . '/../config/web.php')
应该用别名来获取解析出这个路径:file_get_contents(Yii::getAlias('@app/config/web.php'))
,因为根据项目架构未来可能出现的调整,通常我们无法断言“这个app目录肯定不会换”
而这样用别名解析出路径的效果,其实也和你在别的项目里试过用APP_PATH什么这些常量来拼接路径一样
而更重要的是,无论是官方还是我后面的文章中,内容一旦涉及到路径的话,比如文章内容提到“@app/config/web.php”那其实就是指“Yii::getAlias('@app/config/web.php')”得出来的值的路径
习惯了阅读别名路径,才容易阅读Yii的相关文章(无论是官方的还是其它网上的)