首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他Bundles重写您自己Symfony Bundles中的控制器、视图和资源

从其他Bundles重写您自己Symfony Bundles中的控制器、视图和资源
EN

Stack Overflow用户
提问于 2015-01-02 18:24:15
回答 1查看 2.3K关注 0票数 3

如何覆盖您自己的供应商/包控制器或来自另一个包的视图?

Symfony有一种重写第三方 vendor包的默认方法,方法是在您自己的appsrc目录中添加文件,例如app/Resources/AcmeBlogBundle/views/Blog/index.html.twigsrc/Acme/BlogBundle/Resources/views/Blog/index.html.twig

  1. 覆盖Symfony丛的任何部分
  2. 如何使用捆绑继承覆盖绑定的部分
  3. 覆盖捆绑模板

但是,我在src目录中有自己的自定义核心供应商包(例如src/Gutensite/CmsBundle),我需要覆盖模板特定的包中的控制器、视图(twig)和资源(图像、css),当它们需要为特定的设计更改平台的默认行为(例如src/Templates/LunarBundle/)时,应该优先。

意见和资源

因此,为了在我的月球模板中覆盖CmsBundle视图,我可以将文件放在这里:

代码语言:javascript
复制
Templates/LunarBundle/Resources/GutensiteCmsBundle/views/dash.html.twig
Templates/LunarBundle/Resources/GutensiteCmsBundle/public/css/dash.css
Templates/LunarBundle/Resources/GutensiteCmsBundle/public/images/icon.png

如果我制作自己的dash.html.twig模板,我可以在本地引用这些文件。

代码语言:javascript
复制
{% stylesheets '@TemplatesAdminBundle/Resources/GutensiteCmsBundle/public/css/dash.css' %}
<link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}

但是,如果我只添加了一个自定义映像或css,那么原始的Gutensite\CmsBundle\Resources\views\dash.html.twig模板将在我的TemplatesLunarBundle中找到自定义css,当它被引用为:

代码语言:javascript
复制
{% stylesheets '@GutensiteCmsBundle/Resources/public/css/dash.css' %}
<link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}

,但是Symfony默认行为不允许您从自己的包中重写您自己的包。你是怎么做到的?

控制器

对于控制器,我需要同样的重写功能。一个模板包(例如Templates\LunarBundle )可能需要覆盖许多不同的核心供应商包(例如Gutensite\CmsBundle\Controllers\DashController.phpGutensite\ArticleBundle\Controllers\ArticleController.php)。因此,引用“父”的这种方法不起作用,因为这是为OneToOne包重写而设计的。

目前,我所知道的唯一方法是告诉Symfony在同一个名称空间中查找替代文件,例如在我的主控制器中,我将名称空间Gutensite注册到其他位置。

代码语言:javascript
复制
$loader = $GLOBALS['loader'];
// path to the user's current template
$loader->add('Gutensite',   $template->getPath().'/src', true);
// path to the user's custom client files
$loader->add('Gutensite',   \Gutensite\PATH_CLIENT.'/src', true);

然后,我会将我的自定义控制器放在模板中的这样一个目录中:

代码语言:javascript
复制
Templates\LunarBundle\src\Gutensite\CmsBundle\Controllers\DashController.php

这是可行的,但我希望对潜在的问题或更好的解决方案提供反馈。

EN

回答 1

Stack Overflow用户

发布于 2015-01-12 15:36:40

也许这是给你的:https://github.com/liip/LiipThemeBundle

这个包为您提供了向每个包添加主题的可能性。在您的bundle目录中,如果没有找到匹配的文件,它将在Resources/themes/下查看,或者返回到普通的Resources/views。

尤其是查看主题级联顺序的配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27746712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档