我正在筹划一个基于symfony2的网站。默认布局将包含以下块:
对于每个部分,我都知道如何通过编写控制器和Twig模板在Symfony2中编写代码。对于某些部分,我计划使用FOSUserBundle等捆绑包,它提供了自己的控制器。
我找不到一个好答案的是:如何让这一切一起跳舞?如果他们的路线被触发并返回我的主要标题菜单包或FOSUserBundle一个回应。但这没用。我需要一些东西,所有这些构建块都会处理并呈现它们(几乎)的部分,而不管触发的路径是什么。
这对形式特别有意义。如果提交表单,则应通过适当的操作进行处理。但之后所有其他块都应该在返回整个页面之前呈现它们的内容。
如果你知道Drupal:我可以在一个块中实现一个表单。我只处理这个块,而不必关心页面上的所有其他内容。
如果您知道Java/SWING:我可以将操作或对话框实现为自包含的内容。该框架注重保持其他所有内容都是最新的。
答案 0 :(得分:1)
如果我理解正确,您希望在网站的不同区域显示不同的网址,是否正确?
如果是这种情况,请在layout.html.twig(或base.html.twig或您可能称之为的任何内容)中设置要包含在页面上的块
示例layout.html.twig:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Acme Example Page</title>
</head>
<body>
<div id="sidebar">
<div id="sidebar-menu-block" class="block">
{% include 'AcmeBundle:Sidemenu:sideMenu.html.twig' %}
</div>
<div id="sidebar-cart-block" class="block">
{% render url('acme_shopping_cart_block_url') %}
</div>
<div id="sidebar-poll-block" class="block">
{% render url('acme_poll_block_url') %}
</div>
</div>
<div id="content">
{% block body %}{% endblock %}
</div>
</body>
</html>
如果要包含平面树枝模板,请使用“包含”。如果您在加载前需要一个需要处理的块,请使用'render'。
示例页面(IE:AcmeUserBundle:注册:register.html.twig):
{% extends 'layout.html.twig' %}
{% block body %}
<h1>My Page with a form!</h1>
<form>
{{ form_widget(form) }}
<input type="submit" value="Save" />
</form>
{% endblock body %}
上面的示例将围绕您的register.html.twig,其中包含layout.html.twig中定义的所有块。查看symfony文档的“包含其他模板”部分:http://symfony.com/doc/2.0/book/templating.html#including-other-templates
答案 1 :(得分:0)
如果要包含将调用其他复杂渲染的复杂块,则Twig包含是不够的。我认为您应该查看依赖注入器,服务等。例如,您可以创建一个Twig服务,从数据库中获取最后一个“轮询问题”并很好地显示它。如果您对某些代码感兴趣,请随时发表评论。