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