覆盖 Twig 模板的正确开发方法


Proper dev. approach for overriding Twig templates

我最近决定看看Sylius,因为我喜欢开发人员友好的Symfony2项目的想法。

试图浏览各种文档文章,但我似乎无法找到我遇到的一个非常基本问题的答案:在新网上商店开始开发的推荐方法是什么,其中将包括(至少)实现自己的 HTML 模板设计的能力, 并且仍然能够轻松地将Sylius升级到未来版本?

我能够想到的最佳方法是创建一个基于默认SyliusWebBundle的新捆绑包(在我的情况下名为 WebBundle )。问题来了。为了获得最低限度的允许Sylius使用我的捆绑包中的模板,而不是默认的模板,我不得不经历许多箍。以下是我到目前为止所做的几件事:

  • 已从 SyliusWebBundle 复制原始 Controller 目录的内容。更改了返回值以使用WebBundle而不是SyliusWebBundle参数中字符串的一部分来$this->render() ,以及类命名空间。
  • 已将Resources/config/routing目录中的 YAML 文件从SyliusWebBundle复制到我的捆绑包。更改了 YAML 文件中SyliusWebBundle引用,类似于上述内容。
  • app/config/config.yml中添加了新的部分,特别是这部分(旨在覆盖Sylius'Bundle'CoreBundle'DependencyInjection'ConfigurationaddCheckoutSection()的内容):

     sylius_core:
        # ...
        checkout:
            steps:
                security:
                    template: 'WebBundle:Frontend/Checkout/Step:security.html.twig'
                addressing:
                    template: 'WebBundle:Frontend/Checkout/Step:addressing.html.twig'
                shipping:
                    template: 'WebBundle:Frontend/Checkout/Step:shipping.html.twig'
                payment:
                    template: 'WebBundle:Frontend/Checkout/Step:payment.html.twig'
                finalize:
                    template: 'WebBundle:Frontend/Checkout/Step:finalize.html.twig'
    

在更改目录中 YAML 文件中的所有默认控制器引用Resources/config/routing/frontend我还有很多工作要做,但在继续之前,我需要知道这是否是正确的方法,或者我是否走错了路。

我的目标是使用新版本的 Sylius 使商店尽可能容易升级,因此我希望避免修改核心库文件,而是根据需要使用我自己的捆绑包有选择地覆盖功能。

然而,Sylius目前似乎还没有"适应"这种方法,除非我错过了什么。

事实上,我必须覆盖来自多个捆绑包的功能(CoreBundle以及WebBundle,根据上面的 YAML 部分),让我暂停了当前的方法。我希望有人能够引导我朝着正确的方向前进。

你可以覆盖应用程序文件夹中的所有模板(这是Symfony的一部分,适用于所有捆绑包):

app/Resources/SyliusWebBundle/views/Frontend/Checkout/Step/
   security.html.twig
   addressing.html.twig
   shipping.html.twig
   payment.html.twig
   finalize.html.twig