【发布时间】:2013-12-06 11:47:50
【问题描述】:
如果不存在移动版本,我需要一种简单的方法来回退到默认模板。
通过一些正则表达式,我可以识别移动平台并希望使用以下模式呈现模板:
<template_name>.mobile.html.twig
但是如果这个模板不存在,我希望它自动回退:
<template_name>.html.twig
永远存在。
我尝试了这篇文章的几乎所有答案: Symfony 2 load different template depending on user agent properties 但没有成功。遗憾的是没有引用版本号。
目前我正在尝试复制和修改默认的树枝加载器。
顺便说一句,我想要实现的是通过添加同名模板并添加 .mobile 来为移动设备部署不同模板的可能性。
更新:
http://www.99bugs.com/handling-mobile-template-switching-in-symfony2/ 这也是一个很好的方法。它修改了请求对象的格式属性,当您没有在控制器中使用渲染函数(或注释)指定模板而只返回一个数组时,这会影响自动模板猜测。
生成的模板名称:
view/<controller>/<action>.<request format>.<engine>
因此您可以根据设备检测将请求格式从 html 切换为 mobile.html。 这样做的缺点是每个模板都需要一个 mobile.html 挂件(如果不需要,它可以只包含非移动版本)。
更新:
除了使用自定义模板提供程序之外,还可以使用hook into the kernel.view event。
【问题讨论】:
-
你可以创建一个监听器来捕捉不存在的模板错误。您可以通过使用不同的模板返回响应或重定向到仅限移动设备的 url 甚至在带有一些巧妙变量或 JS 的模板上在控制器级别执行此操作(我会在此处执行此操作)。您甚至可以在路由级别上实现它。您可以定义自定义加载器服务。可能性是无限的:)
标签: symfony mobile twig fallback