yii2 aliases web.php,[Yii2笔记]054别名(Aliases)

说明

学习Yii Framework 2(易2框架)的过程是漫长的,也是充满乐趣的,以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现,提供了较完整的代码,供你参考。不妥之处,请多多指正!

原文网址:

http://www.yiiframework.com/doc-2.0/guide-concept-aliases.html

本文主题:别名(Aliases)

别名用于代表文件路径或URL,这样就无需在项目中使用硬代码(hard-code)的绝对路径和URL了。一个别名与普通文件路径或URL不同,它必须使用@字符开头。定义的别名如果没有@字符将会被自动添加。

Yii有许多预定义(pre-defined)的别名可以使用,例如,@yii别名代表Yii框架的安装路径;@web代表当前运行的Web应用的base URL。

1、Defining Aliases(定义别名)

我们可以调用Yii::setAlias()为文件路径或URL定义一个别名:

//为文件路径(file path)定义一个别名

Yii::setAlias('@foo','/path/to/foo');

//为URL定义一个别名

Yii::setAlias('@bar','http//www.example.com');

注意:被定义为别名的文件路径或URL不一定是已存在的文件或资源。

对于一个已定义的别名,无需调用Yii::setAlias(),在其后追加一个正斜杠(/)和路径的其他部分,我们就可以衍生(derive)一个新的别名。使用Yii::setAlias()定义的别名是根别名(root alias),例如:@foo是一个根别名,@foo/bar/file.php是一个衍生别名(derived alias)。

我们可以使用一个别名定义另外一个别名(无论是根别名还是子别名):

Yii::setAlias('@foobar','@foo/bar');

根别名通常在引导(bootstrapping)状态过程中定义,例如,我们可以在入口脚本中调用Yii::setAlias()。通常应用提供了一个名为aliases的可写属性,我们可以在应用配置中配置它:

return[

'aliases'=>[

'@foo'=>'/path/to/foo',

'@bar'=>'http://www.example.com',

],

];

2、Resolving Aliases(解析别名)

我们可以调用Yii::getAlias()解析一个根别名为文件路径或URL,同样它也可以解析一个衍生别名:

echo Yii::getAlias('@foo');

echo Yii::getAlias('@bar');

echo Yii::getAlias('@foo/bar/file.php');

衍生路径或URL的解析是将根别名替换之后再加上后续部分组成的。

注意:Yii::getAlias()方法并不检测路径或URL是否存在真实的对应关系。

一个根别名可以包含正斜线/,Yii::getAlias()方法可以自动判断别名中的根别名,这样就可以正确分辨出剩余的路径或URL了。

Yii::setAlias('@foo', '/path/to/foo');

Yii::setAlias('@foo/bar', '/path2/bar');

Yii::getAlias('@foo/test/file.php'); // displays: /path/to/foo/test/file.php

Yii::getAlias('@foo/bar/file.php'); // displays: /path2/bar/file.php

如果@foo/bar没有定义为根别名,最后一句代码将显示为/path/to/foo/bar/file.php

3、Using Aliases(使用别名)

无需调用Yii::getAlias(),别名就可以在很多地方被自动识别为路径或URL,例如:yii\caching\FileCache::$cachePath 可以接受文件路径或使用别名表示的文件路径,这要归功于使用@前缀即可区分文件路径和别名路径。

use yii\caching\FileCache;

$cache=new FileCache([

'cachePath'=>'@runtime/cache',

]);

具体情况时,请参见API文档查看一个属性或方法参数是否支持别名。

4、Predefined Aliases(预定义的别名)

Yii定义了一些可以轻松被引用的公共别名:

@yii,BaseYii.php文件所在的目录,也被称为Yii框架目录

@app,当前运行应用的基础路径(base path)

@runtime,当前运行应用的运行时目录(runtime path),默认值@app/runtime

@webroot,当前运行应用的Web根目录(Web root directory),也就是入口脚本所在的目录。

@web,当前运行Web应用的基础URL(base URL),此值和yii\web\Request::$baesUrl 相同

@vendor,Composer Vendor目录,默认值为@app/vendor

@bower,包含bower包的根目录,默认值是@vendor/bower

@npm,包含npm包的根目录,默认值是@vendor/npm

@yii是你在入口脚本中包含Yii.php时定义的别名,其他别名是在应用构造器使用应用配置时定义。

5、Extension Aliases(扩展的别名)

通过Composer安装的扩展都会自动定义别名,每个别名以其composer.json文件中声明的扩展的根命名空间命名,每个别名代表扩展包的根目录。例如,你安装了yiisoft/yii2-jui扩展,你会自动获取到@yii/jui的别名,此别名是在引导过程(bootstrapping stage)中定义的,等效于:

Yii::setAlias('@yii/jui','VendorPath/yiisoft/yii2-jui');

//-----------------------------------------------

Aliases实例

//----------------

//实例:自动识别根别名

D:\phpwork\advanced\frontend\controllers\PostController.php

public function actionAlias(){

echo "---alias---";

Yii::setAlias('@foo', '/path/to/foo');

echo "
@foo/bar/file.php:".Yii::getAlias('@foo/bar/file.php'); // displays: /path/to/foo/bar/file.php

Yii::setAlias('@foo/bar', '/path2/bar');

echo "
@foo/bar/file.php:".Yii::getAlias('@foo/bar/file.php'); // displays: /path2/bar/file.php

echo "
@foo/test/file.php:".Yii::getAlias('@foo/test/file.php'); // displays: /path/to/foo/test/file.php

}

测试结果:

http://localhost:8082/post/alias

/*

---alias---

@foo/bar/file.php:/path/to/foo/bar/file.php

@foo/bar/file.php:/path2/bar/file.php

@foo/test/file.php:/path/to/foo/test/file.php

*/

//----------------

//实例:定义根别名

D:\phpwork\advanced\common\config\bootstrap.php

Yii::setAlias('@common', dirname(__DIR__));

Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');

Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');

Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');

Yii::setAlias('@commands', dirname(dirname(__DIR__)) . '/commands');

Yii::setAlias('@root', dirname(dirname(__DIR__)));

D:\phpwork\advanced\frontend\controllers\PostController.php

public function actionAlias(){

echo "alias
";

Yii::setAlias('foo','/asd');

Yii::setAlias('bar','/abc');

echo "
@root:".Yii::getAlias('@root');

echo "
@foo:".Yii::getAlias('@foo');

echo "
@bar:".Yii::getAlias('@bar');

echo "
@foo/bar/file.php:".Yii::getAlias('@foo/bar/file.php');

}

测试结果:

http://localhost:8082/post/alias

/*

alias

@root:D:\phpwork\advanced

@foo:/asd

@bar:/abc

@foo/bar/file.php:/asd/bar/file.php

*/

(全文完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值