2016-12-08 14 views
1

Как добавить весь каталог в Js раздел в активе расслоения yii2Как добавить весь каталог в Js раздел в активе расслоения yii2

Я думаю, что это будет что-то вроде этого

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.min.css', 
    ]; 
    public $js = [ 
     'js/myModule/*', 
    ]; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\bootstrap\BootstrapAsset', 
    ]; 
} 

Я хочу это потому что я не хочу каждый раз (когда я Минимизировать мой CSS или преуменьшать мои JS) написать в расслоении актива что-то вроде этого

'css/site.min.css', 

Вместо написания 'module.min.js', 'module2.min.js' я хотел бы написать что-то вроде регулярных выражений (добавить весь каталог), который будет собирать все файлы из каталога и добавить их к моей пачке активов и мой $js массив будет выглядеть как следующего

'js/myModule/*', 

Так как это осуществить? Есть ли где-нибудь решение «готово из коробки»? Пожалуйста, помогите. Я спрашиваю это потому, что «это нормально, что я (я использую глотку и различные minificators и т.д.) писать в пачке активов module.min.css или module.min.js»

ответ

1

Relyin на Yii2 docs' assets page нет никакого способа, чтобы реализовать эту функцию из коробки.

Но вы можете переопределить метод init() вашего AppAsset класса для реализации разбора папки (соперничает FileHelper) и добавить его в $this->js массив динамически.

Другой способ сделать это (который я лично использую) состоит в том, чтобы проанализировать файл assets.json, который используется файлом gulp, и добавить каждый файл js/css, который генерируется gulp. Вот пример кода

<?php 

namespace app\assets; 

use yii\base\Exception; 
use yii\web\AssetBundle; 

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = []; 
    public $js = []; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\web\JqueryAsset', 
     'yii\widgets\ActiveFormAsset', 
     'yii\validators\ValidationAsset' 
    ]; 

    public $packages = []; 

    public function init() 
    { 
     parent::init(); 

     $content = @file_get_contents(\Yii::getAlias('@app/assets.json')); 
     if (!$content) { 
      throw new Exception('Could not read assests from path ' . \Yii::getAlias('@app/assets.json')); 
     } 
     $assetsData = json_decode($content, true); 

     if (!empty($assetsData['scripts'])) { 
      foreach ($assetsData['scripts'] as $script) { 
       if (in_array($script['name'], $this->packages, true) && $this->loadInAjax($script)) { 
        $this->js[] = 'scripts/' . $script['name'] . '.js'; 
       } 
      } 
     } 

     if (!empty($assetsData['styles'])) { 
      foreach ($assetsData['styles'] as $style) { 
       if (in_array($style['name'], $this->packages, true) && $this->loadInAjax($style)) { 
        $this->css[] = 'styles/' . $style['name'] . '.css'; 
       } 
      } 
     } 

    } 
} 

Надеюсь, что это поможет.