我有一个使用资产的小部件。资产看起来像这样:
class publicHeaderNavbarAsset extends AssetBundle {
public $sourcePath = '@app/components/@device';
public $css = [
'styles.css'
];
public $js = [];
public $depends = [];
}
我还有一个(bootstrap)组件,定义如下:
class Aliases extends Component {
public function init() {
Yii::setAlias('@device', Utils::device());
}
}
Utils::device()
是一个解析设备UA并返回mobile
,tablet
或desktop
的函数,具体取决于设备类型。
问题是Yii2似乎没有将@device
转换为它拥有的值。我首先想到这可能是我的错,但后来我将sourcePath
更改为:
public $sourcePath = '@app/components/@app';
只是为了看看是否会以重复路径(basepath/componenets/basepath
)触发错误,但事实并非如此。
有没有办法可以在运行时更改资产的sourcePath
?或者也许让Yii2解析sourcePath
中的所有别名?
答案 0 :(得分:1)
查看getAlias函数http://www.getyii.com/doc-2.0/api/yii-baseyii.html#getAlias()-detail 它基本上与你给它的字符串中的第二个别名不匹配。
您可以尝试设置
Yii::setAlias('@device', '@app/components/' . Utils::device());
和
public $sourcePath = '@device';
这应该可以,因为您应该能够基于另一个别名设置别名 http://www.yiiframework.com/doc-2.0/guide-concept-aliases.html#defining-aliases