Php Symfony2:表单提交返回表单

Php Symfony2:表单提交返回表单,php,forms,symfony,Php,Forms,Symfony,我正在尝试编辑表单中的实体。如果实体名称为“我的实体”,则表单与常规表单不同,名称字段将被禁用,并且没有“删除”按钮。当我提交常规实体编辑表单时,它运行良好。但当我尝试提交对“我的实体”的更改时,它返回表单 这是我要编辑的表单小枝: <div class="collection-create"> <h3>Edit a collection</h3> <form id="edit-form" method='POST' action="{{ path('e

我正在尝试编辑表单中的实体。如果实体名称为“我的实体”,则表单与常规表单不同,名称字段将被禁用,并且没有“删除”按钮。当我提交常规实体编辑表单时,它运行良好。但当我尝试提交对“我的实体”的更改时,它返回表单

这是我要编辑的表单小枝:

<div class="collection-create">
<h3>Edit a collection</h3>
<form id="edit-form" method='POST' action="{{ path('edit_entity', {'id': entity.id}) }}">
    {% if entity.name == 'My entity' %}
        {{ form_row(form.name, { 'attr':{'disabled':'disabled'} }) }}
    {% else %}
        {{ form_row(form.name) }}
    {% endif %}

    {% if entity.name != 'Saved for later' %}
        <a class="button">Delete</a>
    {% endif %}

    <button type="submit"onclick="editCollection('{{ entity.id }}')">Save</button>
</form>

浏览器不会提交禁用的表单元素。因此,您的$form->isValid()失败,因为它期望并且没有得到一个。您可以在浏览器上按F12并确认实际提交的内容。因此,您的控制器代码只是失效并再次呈现表单,而不是像通常那样重定向

您可能可以使用readonly而不是disabled。这将使用户更难(尽管并非不可能)更改该值,并且该值仍会被发布


最好的方法是在Symfony中定义表单时设置disabled属性。通过这样做,symfony将为您处理事情。在细枝中根本不需要额外的逻辑。但是,由于您希望基于实体中的值完成此操作,因此需要使用表单事件系统来实现此操作。我不会在这里给出详细信息,因为我怀疑readonly对您有效,但您可以在以下网址找到更多信息:

刚刚添加了令牌,现在可以使用了

{% if entity.name == 'My entity' %}
    {{ form_row(form.name, { 'attr':{'disabled':'disabled'} }) }}
{% else %}
    {{ form_row(form.name) }}
{% endif %}
{{ form_row(form._token) }}

“它返回表单”是什么意思?该部分的代码是什么样子的?请向您的管理员显示您提交表单的位置。
{% if entity.name == 'My entity' %}
    {{ form_row(form.name, { 'attr':{'disabled':'disabled'} }) }}
{% else %}
    {{ form_row(form.name) }}
{% endif %}
{{ form_row(form._token) }}