2016-03-30 17 views
0

Öğeleri kullanan bir pencere öğesi var. Böyle bir varlık görünüm:Çalışma zamanında widget varlıkları yolunu değiştirme

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

Utils::device() cihazın UA ayrıştırır ve mobile, tablet veya döner bir fonksiyonudur:

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

Ayrıca bu gibi tanımlanmış bir (desteksiz) bileşenine sahip Cihaz tipine bağlı olarak desktop.

Sorun şu ki, Yii2, @device değerini sahip olduğu değere dönüştürüyor gibi görünmüyor. Ben ilk bu benim hatam olabileceğini düşündüm, ama sonra hiç sourcePath değiştirdi: kopyalanmış bir yolu (basepath/componenets/basepath) ile bir hata tetikleyecek sadece görmek için

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

ama öyle olmadı.

Varlıktaki sourcePath çalışma zamanını değiştirebileceğim bir yöntem var mı? Ya da belki Yii2'yi sourcePath'daki tüm diğer adları ayrıştırırsınız?

cevap

1

getAlias ​​işlevine bakın http://www.getyii.com/doc-2.0/api/yii-baseyii.html#getAlias()-detail Temel olarak ikinci takma adınızı verdiğiniz dizede eşleştirmeyecektir.

Sen başka takma dayalı bir takma ad ayarlamak mümkün olmalıdır gibi bu çalışması gerekir

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

ve

public $sourcePath = '@device'; 

ayarı deneyebilirsiniz http://www.yiiframework.com/doc-2.0/guide-concept-aliases.html#defining-aliases

İlgili konular