Symfony2 中的主题资产管理

Theme assets management in Symfony2

我有一个必须提供不同主题的 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>

我认为最优雅的方式是定义一个默认主题,然后将不同的主题放在一个根文件夹中,就像这样:

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">