Symfony添加默认模板搜索路径

时间:2015-08-18 14:38:06

标签: symfony templates twig templating

我的问题与this question类似,但略有不同,因为这个问题没有得到解答,我想我会再试一次。

我知道Symfony将首先在app/Resources/FooBundle/views中查找,然后在FooBundle/Resources/views中查找第二个模板。我想“注入”两者之间的另一个位置,例如

  1. app/Resources/FooBundle/views
  2. BarBundle/Resources/FooBundle/views
  3. FooBundle/Resources/views
  4. 我已尝试覆盖\Symfony\Component\HttpKernel\Config\FileLocator服务并在那里添加了一条路径,但这不起作用。我也在controller :: render方法中尝试了答案here但没有成功。 (“原生”方法建议不起作用,因为路径来自动态设置。)

    作为次要说明,我需要稍后(可能是onRequest)而不是创建容器时添加此路径。因此,控制器中的EventListener,自定义服务方法或调用是合适的。

1 个答案:

答案 0 :(得分:0)

解决这个问题的部分挑战是意识到(至少在Symfony 2.7中)至少有两种方法来指定模板名称:“旧方式”(缺少更好的名称)和'名称-spaced'方法,后来实现。 e.g。

package.json

这两种方法会导致不同的模板位置搜索,因此必须在两个不同的位置修改代码。

为了修改'old'方式,我重写了Kernel :: locateResource()方法

npm install --save-dev gulp

为了修改命名空间方式,我添加了一个ControllerListener

class MyController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
    // the 'old way'
    public function barAction()
    {
        return $this->render('FooBundle:User:foo.html.twig');
    }
    // namespaced
    public function fooAction()
    {
        return $this->render('@Foo/User/foo.html.twig');
    }
}

我希望这可以帮助任何人来寻找类似的解决方案。