如何在视图中使用已发布的AssetBundle资源包?
解决视图中调用AssetBundle变量提示Undefined variable的问题
问题核心是变量作用域隔离:你在layout的main.php里定义的$moduleAsset是局部变量,视图文件与layout属于不同作用域,视图无法直接访问该变量。
下面提供两种简单可行的解决办法:
方法1:通过视图参数传递变量
在layouts/main.php中注册AssetBundle后,将变量存入视图的params数组:
$moduleAsset = ModuleAsset::register($this); // 把变量存入视图可访问的参数集合 $this->params['moduleAsset'] = $moduleAsset;
之后在视图文件里,通过$this->params调用该变量:
echo HTML::img($this->params['moduleAsset']->baseUrl . '/img/picture.jpg');
方法2:在视图中重新注册AssetBundle
直接在需要使用的视图文件里注册AssetBundle即可,Yii会自动处理重复注册问题,不会重复发布资源:
// 视图文件内重新注册AssetBundle $moduleAsset = ModuleAsset::register($this); echo HTML::img($moduleAsset->baseUrl . '/img/picture.jpg');
两种方法都能解决Undefined variable $moduleAsset的错误,可根据项目场景选择使用。
内容的提问来源于stack exchange,提问作者JKofsky
相关产品推荐
相关产品推荐

