Symfony2中的主题资产管理

时间:2015-03-16 17:26:44

标签: php symfony

我有一个必须提供不同主题的Symfony2应用程序。这些主题本质上是包含CSS文件的目录(最终是其他文件并缩小为单个文件)。

在Phalcon中,我可以在控制器中动态设置资产的资产位置。在Symfony中,资产是明确定义的。我目前的解决方案如下,但看起来不太好。这是我的base.html.twig的HTML。我的实体中有一个属性theme,我在控制器中定义了主题对象。

基本上我正在寻找在Symfony中执行此操作的正确方法。否则,我会这样做。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}Welcome!{% endblock %}</title>

        <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
        {% if theme is defined %}
            {% for asset in theme.css %}
                <link rel="stylesheet" href="{{ asset.url }}"/>
            {% endfor %}
        {% endif %}
    </head>
    <body>
        {% block page %}
            Welcome to the default page!
        {% endblock %}
        {% block javascripts %}
            {% if theme is defined %}
                {% for asset in theme.js %}
                    <script src="{{ asset.url }}"></script>
                {% endfor %}
            {% endif %}
        {% endblock %}
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

我认为最优雅的方法是定义默认主题,并将不同主题放入根文件夹,就像这样:

themes/
    default/
        css|js|images...
    blue/
        css|js|images...
    yellow/
        css|js|images...

然后在Twig模板引擎中,您可以像这样使用它:

<link rel="stylesheet" href="themes/{{ theme_name|default("default") }}/css/app.css"/>

<script src="themes/{{ theme_name|default("default") }}/js/app.js">