gpt4 book ai didi

symfony - 如何在 symfony 2 中的同一模板中呈现具有不同主题的表单

转载 作者:行者123 更新时间:2023-12-04 15:21:42 24 4
gpt4 key购买 nike

我想在 Symfony 中自定义表单渲染。我查了 docs并发现可以使用 {{ form_theme }} 设置渲染主题标签。如果当时只有一个表单,这非常有效,但如果您在同一个模板中有多个表单,则它不起作用。

我的 中的一个简单示例index.html.twig

{% extends 'base.html.twig' %}
{% block body %}

<h1>Hello Form 1</h1>
{% form_theme form1 'bootstrap_3_layout.html.twig' %}

{{ form_start( form1 ) }}
{{ form_end( form1 ) }}

<h1>Hello Form 2</h1>
{% form_theme form2 'bootstrap_3_horizontal_layout.html.twig' %}

{{ form_start( form2 ) }}
{{ form_end( form2 ) }}

{% endblock %}

如您所见,有两个表单变量,我想要 form1'bootstrap_3_layout.html.twig' 渲染和 form2'bootstrap_3_horizontal_layout.html.twig' .我不知道 Twig 的内部结构,但我认为主题覆盖了它们的块定义。

结果看起来像这样

enter image description here

所以我的问题是如何呈现具有给定主题的表单而不相互干扰。有没有办法在单独的干净 Twig 过程中渲染表单?

我尝试了带有自定义函数的 Twig 扩展,但该函数似乎使用相同的 Twig_Environment。我还尝试了一个带有 {% render }% 的子请求,但这也不起作用。

最佳答案

Twig 解决方案

如果您只想使用 horizontal表单的类,您可以将其添加到 form_start() :

{% extends 'base.html.twig' %}
{% block body %}

<h1>Hello Form 1</h1>
{% form_theme form1 'bootstrap_3_layout.html.twig' %}

{{ form_start( form1 ) }}
{{ form_end( form1 ) }}

<h1>Hello Form 2</h1>
{% form_theme form2 'bootstrap_3_horizontal_layout.html.twig' %}

{{ form_start(form2, {'class': 'horizontal', 'attr': {'class': 'horizontal'}}) }}
{{ form_end( form2 ) }}

{% endblock %}

感谢 Ahmed Siouani 的 answer .

HTML + CSS 解决方案

我建议你附上每个 Twig 标签 {{ form() }}<div>使用类,它将允许您添加特定的 CSS 规则。请参阅下面的示例:

/* display the <label> in div.form_1 as red */
div.form_1 label {
color: Red;
}

/* Email field in div.form_2 will only have a width of 50% */
div.form_2 input[type=email] {
width: 50%;
}
/* Password field in div.form_2 will have a left margin and will be narrower */
div.form_2 input[type=password] {
margin-left: 5em;
width: 30%;
}
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet" />

<div class="well">
<h2>Default form</h2>
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
</form>
</div>

<div class="form_1 well">
<h2>Form 1</h2>
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
</form>
</div>

<div class="form_2 well">
<h2>Form 2</h2>
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
</form>
</div>

关于symfony - 如何在 symfony 2 中的同一模板中呈现具有不同主题的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com