嗨,我想知道按照文档中描述的过程注册资源包的优势,例如流程一在应用资产中.php
public $js = [
'js/myjsfile.js'
];
然后在视图文件中添加命名空间,例如
namespace app'assets;
然后添加 use 语句,例如
use app'assets'AppAsset;
AppAsset::register($this);
而不是做这一切,如果我使用流程二
$this->registerJs('js/myjsfile.js', $this::POS_READY);
它工作正常。那么我为什么要使用流程一。
- 任何优势和原因将不胜感激。
- 如果我按照流程一 我需要添加所有 js 文件 应用资产.php单独。
谢谢。
资源包比普通注册具有一些优势。除了@deacs在他/她的回答中所说的之外,还有其他的:
- 资产
- 包可以将文件发布到资产,如果它不在 Web 可访问的目录中 资产
- 包可以处理更少的文件(在CSS的情况下)以及压缩资产。
- 使代码优雅,特别是在解决依赖关系和可重用性方面
所有使捆绑包大放异彩的功能都可以在文档中找到
使用资源包的主要原因之一是资产的路径始终正确。考虑:
$this->registerJsFile('js/myjsfile.js', ['position'=>$this::POS_READY]);
将生成类似以下内容的内容:
<script src="js/myjsfile.js"></script>
这适用于未启用 urlManager 的网址,例如 http://localhost/yiiproject/index.php?r=user/update&id=8
是因为您的浏览器在以下位置查找 js 文件: /yiiproject/js/myjsfile.js
但是如果你启用urlManager,你的url将看起来像http://localhost/yiiproject/user/update/8
,这意味着你的浏览器将在以下位置查找你的js文件:/yiiproject/user/update/8/js/myjsfile.js
。
您可以使用以下命令来解决此问题:
$this->registerJsFile(Yii::$app->request->baseUrl.'/js/myjsfile.js', ['position'=>$this::POS_READY]);
但是资源包基本上可以为您做到这一点。
使用资源包,您还可以从"供应商"文件夹中获取最新版本,因此如果您需要更新某些库,则无需手动执行此操作,因为作曲家已经这样做了。