FOSUserBundle 模板覆盖不适用于 Symfony Flex

FOSUserBundle template override not working with Symfony Flex

我对 Symfony Flex 和 FOSUserBundle 有疑问。我无法覆盖默认的 FOSUserBundle 模板。我尝试按照 Symfony 文档、教程做所有事情,但没有任何效果。就像 Twig 不会使用我的 layout.html.twig 来渲染而不是默认的 FOSUserBundle。

模板目录树看起来应该遵循新的 Symfony Flex 结构:

- templates
   - default
   - FOSUserBundle
      - views
         - layout.html.twig
   - base.html.twig

也许有人在使用 Symfony Flex 时遇到过类似的问题。

在您的自定义用户包中,您必须声明父包

use Symfony\Component\HttpKernel\Bundle\Bundle;

class YourNameSpaceUserBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

Note: Symfony Flex is alpha software; use it at your own risk

https://github.com/symfony/symfony/pull/24179 合并到 Symfony 3.4 中并且自 3.4-BETA14.0-BETA1 起可用的拉取请求指定您需要将模板放在 templates/bundles/FOSUserBundle/layout.html.twig。 PR 描述恰好提到了这个用例作为它的例子。

在 Symfony 3.3 中,它应该通过将模板放在 src/Resources/FOSUserBundle/views/layout.html.twig

中来工作
  • 模板
    • 默认
    • FOSUserBundle
      • layout.html.twig

对我有用

- templates
 - FOSUserBundle
      - layout.html.twig

我也在 Symfony 4.0.8 中工作!

我不明白为什么 symfony 4.0.8 对我不起作用: - 模板 - FOSUserBundle - layout.html.twig

但它适用于 来源 - 资源 - FOSUserBundle - 观点 - layout.html.twig

根据 https://symfony.com/doc/current/templating/overriding.html,我对 symfony4 和 fosUserBundle 也有类似的问题, 对于 registration_content 覆盖,我将模板文件放在 templates\bundles\FOSUserBundle\Registration\register_content.html.twig 它准备工作 希望对你有用

我要在这里放弃我的回答,因为我一直在与这个包进行艰苦的战斗。

我从供应商的捆绑包中复制了所需的模板,并首先将它们放入,

project_root/src/Resources/FOSUserBundle

不过看了文档,好像应该放在project_root/templates/bundles/name_of_bundle/*.

然而这并没有奏效,因为 FOSUserBundle 文件结构不符合 symfonys 约定,您必须将内容移出 views 文件夹。

因此,而不是 project_root/templates/bundles/name_of_bundle/views,将所有内容移出 views 文件夹并移至父 name_of_bundle 文件夹。