不覆盖 symfony2.6 和 FOSUserBundle 1.3 中的模板有什么问题

What is the issue with not overriding templates in symfony2.6 and FOSUserBundle 1.3

我正在尝试使用 'simple' 选项将克隆路径设置为 .app/Resources/FOSUserBundle/views/layout.html.twig 来覆盖 FOSUserBundle 的基本布局,但是 symfony2.6 继续从 vendor 目录中呈现模板.

我的作曲家要求:

"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.6.*",
    "doctrine/orm": "~2.2,>=2.2.3,<2.5",
    "doctrine/dbal": "<2.5",
    "doctrine/doctrine-bundle": "~1.2",
    "twig/extensions": "~1.0",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~3.0,>=3.0.12",
    "sensio/framework-extra-bundle": "~3.0,>=3.0.2",
    "incenteev/composer-parameter-handler": "~2.0",
    "friendsofsymfony/user-bundle": "~1.3"
},

我检查了以下常见问题:

其他信息: - 在带有 ubuntu-trusty-64 的 vagrant 实例上运行 - 同步文件夹是通过 NFS

我接下来应该看什么或做什么有什么想法吗?

问题主要与 Symfony2 或 FOSUserBundle 无关,但与 PHP 缓存文件统计信息的方式有关。

为了找到要加载的正确模板,标准 Symfony2 使用 Symfony\Component\HttpKernel\Kernel->locateResource ,首先检查 .app\Resources 目录中是否存在覆盖以及 $first 参数是否设置为 true它 returns 来自 foreach 循环内部。

在我的配置中,PHP 决定继续使用文件缓存并对 file_exists 回答否,即使文件在那里。

为了解决/解决这个问题,我的 AppKernel.php 覆盖了 Symfony\Component\HttpKernel\KernellocateResource class:

<?php
class AppKernel extends Kernel
{
    // .. other methods here

    public function locateResource($name, $dir = null, $first = true)
    {
        clearstatcache(true);
        return parent::locateResource($name, $dir, $first);
    }
}

不漂亮,但很管用。