gpt4 book ai didi

php - Symfony2 表格 : How to render the same element twice in the same view

转载 作者:可可西里 更新时间:2023-11-01 12:53:29 28 4
gpt4 key购买 nike

我有一个 Controller ,我在其中创建一个带有两个下拉列表的表单。

当我呈现我的 View 时,我希望在页面的顶部和底部有相同的表单元素。问题是表单元素(下拉列表)仅显示在页面顶部,即使我要求 twig 也将它们也放在底部。

这是我想要的:

enter image description here

1 和 2 是下拉列表。我想在页面的顶部和底部复制它。

关于如何做到这一点有什么想法吗?

顶部内容和底部内容,其中两个下拉列表位于一个单独的 twig 文件 (searchPanel.html.twig) 中,并且该文件包含在页面中

{% include "MyBundle:Search:searchPanel.html.twig" %}

这是 searchPanel.html.twig

<div class="searchPanel">

<form action="{{ path }}" method="POST" {{ form_enctype(form) }}>
Papers per page
{{ form_widget(form.papers_per_page, { 'class': 'ppp'}) }}

/ Sort by
{{ form_widget(form.sort_by, { 'class': 'sort'}) }}
{{ form_rest(form) }}

/ Papers ({{ papers_number }} results)

<input type="submit" class="updateSearchResults" value="Update"></input>
</form>

最佳答案

您的方法中的一个问题是 Symfony 的表单组件将呈现带有 id 的表单元素,如果您在页面上两次呈现相同的表单,这些元素将被复制。您可能还会遇到 csrf_token 的问题。要点是表格不能被复制。

这是我会做的。在不使用 Symfony\Form 的情况下创建一个包含分页器表单的 Twig 模板,即静态创建所有表单元素并将其传递给分页器对象(或数组)以获取数据,而不是使用 form_widget()。像这样:

<form action="{{ path(app.request.attributes.get('_route') }}" method="POST">
<select name="paginator[per_page]">
{% for per_page in paginator.papers_per_page %}
<option value=""{{ per_page }}">{{ per_page }}</option>
{% endfor %}
</select>
</form>

表单 Action 会自动将数据提交到你当前的路由,所以你可以将它嵌入到不同的 Action 中,它会把数据提交到同一个 Action 。在 POST 上,您可以只使用后期数据创建一个分页器对象,然后将其添加为表单的数据。之后,您只需像往常一样使用 isValid()。

在您的 Controller 中,您可以像这样获取数据:

use Symfony\Component\HttpFoundation\Request;
// ...

public function PaperController()
{
public function listAction(Request $request)
{
if ($request->getMethod() == 'POST') {
$data = $request->request->get('paginator');
$paginator = new Paginator($data);

$form = new PaginatorFormType();
$form->setData($paginator);

if ($form->isValid()) {
// ...
}
}
}
}

您可以像这样轻松地将表单嵌入到您的 View 中:

{{ include 'AcmeDemoBundle:Form:paginator.html.twig' with { 'paginator': paginator } }}

基本上,您只需在 Controller 中使用表单组件来进行验证。如果您想设置一些默认值或添加其他参数,您可能需要创建一个 macro来自该模板,但对于您的用例,这应该足够了。也许其他人有更好的解决方案,但这就是我在我的一个项目中遇到类似问题的方式。

关于php - Symfony2 表格 : How to render the same element twice in the same view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682852/

28 4 0
文章推荐: php - 在 Symfony2 中使用 Form Collections 和 Doctrine 上传图片
文章推荐: html - @font-face 在 Firefox 中不合作
文章推荐: html - 如何在