如何在Symfony 4中覆盖第三方bundle的资源?

8
我使用Symfony Flex进行了全新的Symfony安装,并使用属于下一个Symfony 4目录结构的新骨架。接下来,我将覆盖一些外部包的资源,例如模板、翻译等,详情请参见继承文档
我尝试创建这些模板路径(作为起点),但是没有一个有效:
  • templates/EasyAdminBundle/views/...
  • templates/Resources/EasyAdminBundle/views/...
  • app/Resources/... (只是旧结构的证明)
我应该把我的资源文件放在哪里,以覆盖第三方包的资源?
1个回答

16

对于所有的Symfony版本,资源路径是%kernel.root_dir%/Resources/。由于新的4.0结构将Kernel.php放在src/目录中,因此路径应为:

%kernel.project_dir%/src/Resources/
# local resources directory
src/Resources/
# still works this path for local templates
src/Resources/views/ 

# override resources for third-party bundles
src/Resources/AcmeDemoBundle/views/ # legacy convention to override templates
src/Resources/AcmeDemoBundle/translations/ # for override both translations and validations files
src/Resources/AcmeDemoBundle/... # etc.

新的约定来覆盖资源(自Symfony 3.4以来)

Twig Templates: 只需遵循以下约定:

templates/bundles/AcmeDemoBundle/path/to/template.html.twig

如果您正在升级到Symfony 3.4和4.0,并且希望使用先前的模板约定,请配置自己的Twig路径:

# app/config/config.yml (3.3)
twig:
    paths:
        # Default templates directory, since 3.4+
        templates: ~

        # Directory convention to override bundle templates, since 3.4+
        # make sure to know the actual Twig namespace for each bundle.
        # e.g. AcmeDemoBundle -> AcmeDemo:
        templates/bundles/AcmeDemoBundle: AcmeDemo

翻译: templates / 相似,您在项目根目录中也有 translations / 目录(默认情况下):

translations/bundles/AcmeDemoBundle/messages.en.yml
注意:/bundles/AcmeDemoBundle/子目录并非必需的,因为翻译与bundle无关,而与域名相关。这意味着只要在正确的域中覆盖翻译即可。

注:由于翻译与bundle无关,而是与域名相关,因此/bundles/AcmeDemoBundle/子目录不是必需的。这意味着只要在正确的域中覆盖翻译即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接