提问者:小点点

在Twig Loader链的顶部添加新的Twig Loader


我想创建一个新的TwigLoader类,并在Symfony的TwigLoader类之前触发它。

这个Stackoverflow问题/答案很有帮助,但是我无法定义权重,因此只有在Symfony的加载器找不到模板时,我的自定义加载器才会触发。

我希望该逻辑包含在我的包中,因此我不想:

  • app/config中定义我的自定义TwigLoader。yml
  • 覆盖Symfony的TwigLoader

当前,Symfony细枝加载程序要么返回默认细枝加载机制,要么路径类似于@Bundle:Controller:Action。总体安排引擎将尝试加载文件@Bundle/Resources/views/Controller/Action。html。细枝

在我的例子中,我希望能够映射@Bundle:Controller:Action。总体安排引擎指向一个完全不同的路径,如果该路径与现有文件不匹配,则应返回默认行为(Symfony的细枝加载程序)。

也许还有其他方法来解决这个问题,但这似乎是完成任务的最合适的方法。

我正在构建一个BaseThemeBundle,我将在我的开源论坛项目中使用它,我希望能够轻松地将主题从捆绑包中分离出来,并有可能做各种很酷的事情。:)

到目前为止,我已经创建了一个自定义细枝加载器,它看起来像Symfony的细枝加载器。我已经创建了一个自定义模板定位器。

有什么想法、解决方案或改进吗?


共1个答案

匿名用户

为了与所有的模板引擎一起工作,我认为你应该创建一个新的模板定位器(也许扩展Symfony\Bundle\FrameworkBundle\Temta\Loader\TemplateLocator),并通过将别名templating.locator设置为新创建的别名来覆盖DI容器中的默认值模板定位器。

要使模板定位器类首先查看所需的文件夹,必须为新路径创建文件定位器(Symfony\Component\Config\FileLocatorInterface),并将其插入模板定位器类。