我的问题与this question类似,但略有不同,因为这个问题没有得到解答,我想我会再试一次。
我知道Symfony将首先在app/Resources/FooBundle/views
中查找,然后在FooBundle/Resources/views
中查找第二个模板。我想“注入”两者之间的另一个位置,例如
app/Resources/FooBundle/views
BarBundle/Resources/FooBundle/views
FooBundle/Resources/views
我已尝试覆盖\Symfony\Component\HttpKernel\Config\FileLocator
服务并在那里添加了一条路径,但这不起作用。我也在controller :: render方法中尝试了答案here但没有成功。 (“原生”方法建议不起作用,因为路径来自动态设置。)
作为次要说明,我需要稍后(可能是onRequest)而不是创建容器时添加此路径。因此,控制器中的EventListener,自定义服务方法或调用是合适的。
答案 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');
}
}
我希望这可以帮助任何人来寻找类似的解决方案。