为 Symfony 指定备用后备路径以查找捆绑包的树枝模板

2024-06-20

基本问题

如何让 symfony 在非标准目录中查找“最佳”(自定义)Twig 模板来加载捆绑视图?

Symfony 文档说默认情况下它会在两个位置查找覆盖 Twig 模板 http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates

当呈现 AcmeBlogBu​​ndle:Blog:index.html.twig 时,Symfony 实际上在两个不同的位置查找模板:

应用程序/资源/AcmeBlogBu​​ndle/views/Blog/index.html.twig src/Acme/BlogBu​​ndle/Resources/views/Blog/index.html.twig

但这正在讨论如何覆盖供应商捆绑包。就我而言,我的 /src/ 中有本机捆绑包,我想根据每个设计模板或特定于客户端的基础来覆盖它们。它需要查看:

Client:    /var/www/vhosts/{ID}/src 
Template:  /var/www/core/cms/src/Gutensite/TemplateBundle/Templates/Admin/src

树枝装载机有一个方便的方法来添加路径:

$templatePath = '/var/www/core/cms/src/Gutensite/TemplateBundle/Templates/Admin/Resources/views';
$this->container->get('twig.loader')->prependPath($templatePath, 'template');

这允许我注册模板资源的替代路径,以便我可以像这样渲染模板 shell:

{% 扩展 '@template/shell/shell.html.twig' %}

但是当我想覆盖捆绑模板时该怎么办,例如

Original: /var/www/core/cms/src/Gutensite/MenuBundle/Resources/views/Menu.html.twig
Custom:   /var/www/core/cms/src/Gutensite/TemplateBundle/Templates/Admin/src/Gutensite/MenuBundle/Resources/views/Menu.html.twig

如何注册一个通用 /src/ 文件,以便 Symfony 在那里查找对 Vendor Bundle 路径的所有引用,例如尝试渲染@GutensiteMenu/Menu.html.twig首先会在自定义目录中查找1) 客户 , 2)模板, 3) 该名称的默认捆绑目录。

需要资产

因为我的 TemplateBundle/Templates/Admin/Resources/ 位于非标准位置,所以 assetic 不会将它们转储到公共目录(或创建符号链接)...所以我不确定如何动态地使 assetic 找到这些文件。

我也不确定如何加载这些其他位置的资产,例如这不起作用:

{% stylesheets '@GutensiteTemplateBundle/Templates/Admin/Resources/public/css/site.css' %}
<link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}

大概是因为没有被抛弃。

为什么我需要这个?

我正在构建一个托管 CMS,它是一个核心供应商,其中包含带有控制器和模板的各种捆绑包,例如/Gutensite/CmsBundle, Gutensite/ArticleBundle.

根据为站点选择的“设计模板”,在 TemplateBundle 中引用设计模板,例如/TemplateBundle/Templates/Admin(名为“Admin”的模板)。 TemplateBundle 需要能够覆盖核心控制器或视图。

我已将 Gutensite/TemplateBundle/Templates/Admin/src/ 文件夹注册为 Composer app/autoload.php 的替代命名空间,这样控制器只要具有相同的名称空间就可以被覆盖Gutensite命名空间(这很好用):

// in my primary controller:
$loader = $GLOBALS['loader'];
$loader->add('Gutensite', '/var/www/core/cms/src/Gutensite/TemplateBundle/Templates/Admin/src', true);

注意:我可以将每个模板注册为捆绑包,理论上这将允许我使用 symfony 的内置方法覆盖控制器和捆绑包。但这会增加很多并非真正传统捆绑的“捆绑”。另外,我需要上述解决方案来指向替代模板路径,因为我还需要能够指向位于正常 symfony 根目录之外的客户端自定义文件(我成功地使用控制器的命名空间自动加载器路径做到了这一点)。


您可以使用pathtwig 配置中的选项,2 个路径具有相同的命名空间。

twig:
    # ...
    paths:
        "%kernel.root_dir%/../src/Gutensite/MenuBundle/Resources/views": templates
        "%kernel.root_dir%/../src/Gutensite/TemplateBundle/Templates/Admin/src/Gutensite/MenuBundle/Resources/views": templates

然后,使用@templates/Menu.html.twig首先会寻找Menu.html.twig在 MenuBundle 中,然后在 TemplateBundle 中。

就是这样TwigExtension正在注册路径,以便加载程序正在查找app/Resources/views然后在捆绑包的视图中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Symfony 指定备用后备路径以查找捆绑包的树枝模板 的相关文章

  • 使用 Symfony 表单上传多个文件

    UPDATED在我的 Symfony 项目中 我能够上传单个图像 现在我正在尝试上传多个图像 class ImageFile extends AbstractType param FormBuilderInterface builder p
  • Symfony2 功能测试会话持久性

    我正在尝试在 Symfony 中进行一些功能测试 但目前我的会话遇到了问题 我执行了一段代码 它似乎有效 但容器的会话中没有存储任何内容 我有一个表格 您可以在其中设置数据 当您提交它时 它会检查值并将其存储在会话中 然后它重定向到另一个页
  • FOSUserBundle 密码验证

    我正在尝试覆盖 FOSUserBundle 中当前的密码验证 我尝试了几种选择 但仍然找不到解决方案 为了增加密码的 MinLength 我创建了一个validation yml src Acme UserBundle Resources
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • Symfony2 中的 Composer 创建相同的资源两次(jquery、jqueryui)

    我将 jquery 和 jqueryui 添加到composer json require components jquery 1 11 dev components jqueryui 1 10 4 作曲家正在下载这两个库并将它们放入供应商
  • 无法打开输入文件应用程序/控制台

    我安装了 wamp 服务器和 Symfony2 框架的副本 我正在尝试使用以下命令创建一个捆绑包 php app console generate bundle nampespace IDP IDP Bundle format yml 我的
  • 如何使用变量处理树枝文件中的翻译?

    我有一个 twig 文件和一个 yml 在其中定义翻译变量 e g YML 文件 variable for translation Disponible para t Twig 文件的内容 h2 Hola Follow variableNa
  • 为 Symfony 指定备用后备路径以查找捆绑包的树枝模板

    基本问题 如何让 symfony 在非标准目录中查找 最佳 自定义 Twig 模板来加载捆绑视图 Symfony 文档说默认情况下它会在两个位置查找覆盖 Twig 模板 http symfony com doc current book t
  • 如何在 Symfony2 WebTestCase 中重定向后获取当前 URL?

    使用 Symfony2 WebTestCase 我进行了以下测试 client gt request GET this gt assertTrue client gt getResponse instanceof RedirectRespo
  • 如何让 Symfony 表单与 REST API 配合使用?

    我目前正在尝试让 symfony 表单与我的帖子一起使用并放置其余 api 端点 目前我有 request this gt getRequest cc new CreditCard form this gt createForm new C
  • Sonata 管理捆绑包区域设置

    我的翻译有问题 我用 交响乐2 7 奏鸣曲管理包 2 3 我已经创建了交互式登录侦听器 当用户登录应用程序时 我获取用户区域设置并设置会话 区域设置 但这在奏鸣曲中被忽略 听众是 class UserLocaleListener var S
  • Symfony2将上传的文件分配到内存

    上传的文件大于帖子最大大小在 Symfony 中 上传的文件是在内存中分配的 致命错误 允许的内存大小 150994944 字节已耗尽 已尝试 分配 84627994 字节 Applications MAMP htdocs Symfony
  • 在 Symfony2 dev env 控制器中捕获 swiftmailer 异常

    我不知道为什么我没有在我的控制器中捕获 Swiftmailer 的异常 我做错了什么 或者错过了什么 在控制器中我有 try this gt get mailer gt send email catch Swift TransportExc
  • 在 Twig 模板中的翻译内容中添加链接

    在 Twig 模板中 我需要一个包含链接的翻译文本 路径应该由路由器生成 而不是静态嵌入 Twig 不允许在 trans 块内渲染变量 我还知道以下内容 trans with name Fabien from app Hello name
  • Symfony 权限被拒绝

    谁能帮我解决我收到的以下错误消息 我终于在虚拟机上安装了 Symfony 它似乎工作正常 除了我偶尔收到这样的消息 1 2 ContextErrorException Warning SessionHandler read open var
  • 路径表达式无效。需要 StateFieldPathExpression 或 SingleValuedAssociationField

    我有以下查询 query em gt createQueryBuilder gt select s COUNT pictures AS HIDDEN items gt from MainBundle InstagramShop s gt i
  • 在奏鸣曲管理列表顶部显示订单总数

    根据特定条件进行筛选后 在页面顶部显示销售交易金额总额 如果页面不止一页 这应该是所有页面的总和 有人可以指导我如何做到这一点 我们按照以下方式做到了 效果非常好 Step 1 orderAdmin中添加了两个方法 public funct
  • 无法使用 Symfony2 和 TinyMCE 提交表单

    我有一个带有由 TinyMCE Javascript 库丰富的文本区域的表单 当启用 Javascript 库时 如果我按下提交按钮 页面不会改变 如果我禁用该库 一切正常 人们可能会发现该库没有正确使用 我使用的是来自傻瓜教程 http
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f

随机推荐