2016-03-30 19 views
0

Ich habe ein Widget, das Assets verwendet. Der Asset sieht wie folgt aus:Widget-Assets Pfad zur Laufzeit ändern

class publicHeaderNavbarAsset extends AssetBundle { 
    public $sourcePath = '@app/components/@device'; 
    public $css = [ 
     'styles.css' 
    ]; 
    public $js = []; 
    public $depends = []; 
} 

Ich habe auch eine (Bootstrap) -Komponente, so definiert:

class Aliases extends Component { 
    public function init() { 
     Yii::setAlias('@device', Utils::device()); 
    } 
} 

Utils::device() ist eine Funktion, die UA des Geräts analysiert und gibt mobile, tablet oder desktop, abhängig vom Gerätetyp.

Das Problem ist, dass Yii2 @device nicht zu dem Wert konvertiert, den es hat. Ich dachte zuerst, dass es meine Schuld sein könnte, aber dann änderte ich die sourcePath zu:

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

nur um zu sehen, ob das einen Fehler mit einem duplizierten Pfad (basepath/componenets/basepath) auslösen, aber es kam nicht.

Gibt es eine Möglichkeit, die sourcePath meines Asset zur Laufzeit ändern? Oder vielleicht machen Yii2 alle Aliase in sourcePath analysieren?

Antwort

1

Sehen Sie sich die Funktion getAlias ​​an http://www.getyii.com/doc-2.0/api/yii-baseyii.html#getAlias()-detail Sie wird im Grunde nicht mit Ihrem zweiten Alias ​​in der Zeichenfolge übereinstimmen, die Sie ihm gegeben haben.

können Sie versuchen,

Yii::setAlias('@device', '@app/components/' . Utils::device()); 

und

public $sourcePath = '@device'; 

Einstellung Dies sollte funktionieren, wie Sie einen Aliasnamen festgelegt werden können, sollte auf Basis eines anderen alias http://www.yiiframework.com/doc-2.0/guide-concept-aliases.html#defining-aliases

Verwandte Themen