常用底层知识 - 别名

  • 作者: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的相关文章(无论是官方的还是其它网上的)