在运行时更改窗口小部件资产路径

时间:2016-03-30 18:13:38

标签: php yii2

我有一个使用资产的小部件。资产看起来像这样:

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并返回mobiletabletdesktop的函数,具体取决于设备类型。

问题是Yii2似乎没有将@device转换为它拥有的值。我首先想到这可能是我的错,但后来我将sourcePath更改为:

public $sourcePath = '@app/components/@app';

只是为了看看是否会以重复路径(basepath/componenets/basepath)触发错误,但事实并非如此。

有没有办法可以在运行时更改资产的sourcePath?或者也许让Yii2解析sourcePath中的所有别名?

1 个答案:

答案 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