【问题标题】:Can I send Symfony parameter on Webpack Encore?我可以在 Webpack Encore 上发送 Symfony 参数吗?
【发布时间】:2020-05-05 11:07:28
【问题描述】:

我使用 Symfony 5 和 Webpack Encore Bundle。

在我的 services.yaml 中,我有一个颜色列表:

parameters:
    colors:
        Beige: '#fffac8'
        Blue: '#0082c8'
        Black: '#000000'
        ...

这些颜色用于Command 文件、我的Controllers(= 每个用户可以选择一种颜色)等等。

是否可以在我的由 Webpack Encore Bundle 生成的 SCSS 文件中检索 colors 参数,以避免重复代码?

目前,我直接在我的 scss 文件中复制 services.yaml 的颜色:

$beige: #fffac8;
$blue: #0082c8;
$black: #000000;

$theme-colors: (
    "beige": $beige,
    "blue": $blue,
    "black": $black,
    ...

【问题讨论】:

  • services.yaml 不是用来存储颜色的,这看起来像代码味道。你应该重新考虑一下,SCSS 提供了很多解决这种依赖的可能性。无论如何,如果您确实需要从后端代码访问它们,请将它们放在单独的文件中,例如 colors.yaml,然后使用 imports: [ { resource: 'colors.yaml' } ] 将其导入 services.yaml

标签: symfony webpack webpack-encore


【解决方案1】:

您可以将参数声明到 JSON 文件中,然后使用 sass-json-vars 之类的工具从您的 services.yamlvariables.scss 导入它(或 node-sass-json-importer 用于 node-sass 和 webpack)。

或者你可以从 PHP 解析你的 scss 文件,注入一个自定义的依赖注入配置加载器,但我不知道有什么工具可以做到这一点。

在任何情况下,它都不是一个防弹的解决方案。

【讨论】:

  • 如何将 json 文件加载为 Symfony 配置?我能想到将json作为配置处理的唯一方法是通过env variable processor,比如env(json:FOO)
  • 抱歉,我记得在我的一个项目中使用了一个用于依赖注入的 JsonLoader,但可能是自定义的。但是,您始终可以在 Kernel::configureContainer 中加载您的 JSON 文件,并直接在容器构建器中注入参数。
  • 另一种说法:YAML 是 JSON 超集。您可以尝试使用 YamlLoader 直接加载 JSON 文件。在configureContainer,您可以拨打$loader->load('/path/file.json', 'yaml')
猜你喜欢
  • 2020-07-22
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 2021-03-23
  • 2020-01-29
  • 1970-01-01
  • 2018-07-03
相关资源
最近更新 更多