Skip to content

Instantly share code, notes, and snippets.

@devanych
Last active August 31, 2021 20:00
Show Gist options
  • Save devanych/52297ea68550e5de5658f56d7e30b4b1 to your computer and use it in GitHub Desktop.
Save devanych/52297ea68550e5de5658f56d7e30b4b1 to your computer and use it in GitHub Desktop.
Варианты реализации ассетов для yiisoft/assets

Варианты реализации ассетов для yiisoft/assets

Issue: yiisoft/assets#24

  • Декларативный подход - отказаться от наследования, сделать AssetBundle финальным, все значения свойств указывать в массивах в конфигурационных файлах. Принимать конфигурацию в конструктор AssetManager. yiisoft/assets#57

  • Гибрид - оставить классы как в текущей реализации. Объявлять в конфигурации все используемые классы (с доп. настройками если необходимо изменить дефолт). Принимать конфигурацию в конструктор AssetManager и регистрировать только объявленные классы.

Варианты и особенности Текущая Декларативный Гибрид
Динамическая регистрация ассетов ДА НЕТ НЕТ
Типизация и автокомплит в IDE ДА НЕТ ДА
Объединение конфигураций НЕТ ДА ДА
Экспорт ассетов для сборщиков НЕТ ДА ДА
Доп. логика для каждого ассета ДА НЕТ ДА
  • Динамическая регистрация ассетов - возможность регистрировать любой класс расширяемый AssetBundle.
public function register(array $names, ?int $position = null): void;

Для гибридного и декларативного подхода в $names нужно будет передавать имена ассетов, которые были объявлены в конфигурации.

  • Экспорт ассетов для сборщиков - экспорт свойств со значениями в другие форматы, например в JSON для сборщиков модулей, таких как Webpack. Для экспорта нужно иметь массив ассетов $class => $configArray|false. В гибридном и декларативном подходе такой массив передается в конструктор, а в текущей реализации, юзеру нужно будет в ручную формировать массив для экспорта.
  • Доп. логика для каждого ассета - возможность добавления дополнительной логики, например фильтров: https://github.com/yiisoft/yii-bootstrap5/blob/master/src/Assets/BootstrapAsset.php#L33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment