2016-09-16 4 views
0

Может быть, это глупо, но просто хотел спросить, правильно ли я использую синтаксис при публикации файлов актива. The Guide инструктирует использовать имена папок без привязки звездочки, однако для меня это не работает.Yii2 AssetBundle publishOptions шаблон синтаксиса?

Странная вещь, даже если я укажу только для публикации папки css и images, assetManager также публикует другие папки в $sourcePath (к счастью, без файлов внутри). Более того, когда новые файлы добавляются в папку с изображениями, они остаются неопубликованными до тех пор, пока я не удалю папку @web/assets. Этого можно ожидать?

<?php 
namespace app\views\layouts\main\assets; 
use yii\web\AssetBundle; 

class ThemeAsset extends AssetBundle 
{ 
    public $sourcePath = '@theme'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.css', 
    ]; 

    public $publishOptions = [ 
     "only" => [ 
      "css/*", 
      "images/*", 
     ], 
     "forceCopy" => false, 
    ]; 
} 
+0

Последний вопрос ... они стали неопубликованные ... это потому, что значение силы копирования параметров является ложным. – StalkAlex

ответ

2

Первая нота, что вы должны установить $sourcePath или $baseUrl не оба из них (Если вы установили оба, бывший перезаписывает последний, когда assetManager вызовы publish метод).

Странная вещь, даже если я указываю только публиковать CSS и изображения папку, то assetManager публикует также другие папки в $ SourcePath (к счастью, без файлов внутри).

Если вы хотите избежать управляющего активами опубликовать эти папки, необходимо отметить их except параметра publisOptions:

'except' => [ 
    "doc/", 
    "img/", 
], 

Более того, когда новые файлы добавляются в папку с изображениями, они остаются не опубликовано, пока я не удалю папку @ web/assets. Этого можно ожидать?

Да! Это естественное поведение. Вы можете установить forceCopy свойство publishOptions на true в режиме разработки. Это приводит к обновлению содержимого актива при каждом обновлении. Легко вы можете использовать постоянную производства Yii: YII_DEBUG.

public $publishOptions = [ 
    'only' => [ 
     'js/', 
     'css/', 
    ], 
    'forceCopy' => YII_DEBUG, 
]; 

Так полностью у вас есть менеджер активов, как это:

<?php 
namespace app\views\layouts\main\assets; 
use yii\web\AssetBundle; 

class ThemeAsset extends AssetBundle 
{ 
    public $sourcePath = '@theme'; 

    public $css = [ 
     'css/site.css', 
    ]; 

    public $publishOptions = [ 
     "only" => [ 
      "css/*", 
      "images/*", 
     ], 
     'except' => [ 
      "doc/", 
      "img/", 
     ], 
     "forceCopy" => YII_DEBUG, 
    ]; 
} 
+0

Знаете ли вы, что единственное и за исключением работает с * .less файлами? Я хочу, чтобы файл был преобразован, но не скопирован. Но когда я добавляю 'only' => 'css/*. Css', файл меньше не преобразуется. Если я добавлю 'except' => '* .less', то также не будет выполнено преобразование ... – BHoft

+0

Фактически сейчас я не имею ни малейшего представления о вашей проблеме, а также свободное время для чтения источника 'AssetBundle' для поиска решение. Предлагаю вам задать новый вопрос. @BHoft – meysam

Смежные вопросы