【问题标题】:How to use Symfony TwigComponent from bundle如何使用 bundle 中的 Symfony TwigComponent
【发布时间】:2023-01-29 13:45:59
【问题描述】:

我正在使用 symfony 5.4。

我的供应商文件夹中有一个包,可以正常工作。

我创建了一个 LiveTwigComponent。

当模板文件“network_list.html.twig”位于我的“模板/组件”文件夹中时,它可以完美运行。 由于逻辑属于我的 Bundle,我试图将它移动到“src/Resources/views/components”文件夹。 如果我这样做,我有一个错误: “无法找到模板“components/network_list.html.twig” 在我的模板中,我这样调用组件

{{ component('network_list') }}

我尝试使用 bundle 命名空间作为前缀,因为它适用于我的 bundle 中的其他模板

{{ component('@MyFooBarBundle\\network_list') }}

{{ component('@MyFooBarBundle\\components\\network_list') }}

但也不起作用,我有另一条错误消息

模板渲染期间抛出异常(“未知组件“@MyFooBarBundle\components\network_list”。已注册的组件为:network_list”)。

我怀疑我可能必须为 twig 添加一个配置行来告诉 bundle 查看我的 bundle 子文件夹,但我没有找到任何关于此的文档。

我究竟做错了什么 ?

提前致谢

【问题讨论】:

  • 命令bin/console debug:twig 将列出所有当前的 twig 命名空间。通常会删除 Bundle 后缀。所以试试@MyFooBar\whatever
  • 感谢这个命令,我可以确认我的命名空间出现了,我可以在我的控制器中引用这些包模板这一事实证实了这一点。路径也是正确的,指向我的包的 /src/Resources/views 文件夹。但是,如果我尝试使用前缀 @MyBundleNameWithoutSuffix\\ComponentName 调用该组件,则会出现此组件不存在的错误。同样通过直接调用不带前缀的组件名称
  • 那么为什么要使用双反斜杠呢?正斜杠是常态:'@MyFooBar/components/network_list.html.twig'

标签: symfony twig bundle


【解决方案1】:

默认路径位于config/packages/twig.yaml,如果您想更改默认路径,可以在此处进行。如果要添加多个位置,可以通过将它们添加到“路径”部分并定义文件类型来实现。下面的代码应该适用于您的用例:

# config/packages/twig.yaml

twig:
    default_path: '%kernel.project_dir%/templates'
    paths:
        '%kernel.project_dir%/assets/css': css
        '%kernel.project_dir%/src/Resources/views/components': twig

【讨论】:

  • 感谢你的回复。我已经按照您的建议添加了该行,但没有进行任何更改。我尝试在我的模板中使用我在第一篇文章中列出的不同可能性来调用它,但找不到该组件
【解决方案2】:

您可以通过将模板作为第二个参数传递给 AsTwigComponent 属性来自定义用于呈现组件的模板:

- #[AsTwigComponent('network_list')]
+ #[AsTwigComponent('network_list', template: '@MyFooBarBundle/network_list.html.twig')]
  class NetworkListComponent
  {
      // ...
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2018-10-10
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    相关资源
    最近更新 更多