我正在尝试在表单中编辑实体。如果实体的名称是“我的实体”表单看起来与常规不同,则名称字段将被禁用,并且没有“删除”按钮。当我提交常规实体编辑表单时,它工作正常。但是当我尝试向“我的实体”提交更改时,它会返回表单
这是我的编辑树枝:
<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>
控制器
/**
* @Route("/edit/{id}", name="edit_entity")
* @Template()
*/
public function editAction(Entity $entity, Request $request)
{
$form = $this->createForm(new EntityType(), $entity, array(
'action' => $this->generateUrl('edit_entity',['id' => $entity->getId()]),
'method' => 'POST'));
$form->handleRequest($request);
if ($form->isValid() && $form->isSubmitted()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->render('@Entity/Entity/submit.html.twig', array(
'entity' => $entity));
}
return array('entity'=>$entity, 'form' => $form->createView());
}
答案 0 :(得分:2)
浏览器不提交已禁用的表单元素。所以你的$ form-&gt; isValid()失败了,因为它期望并且没有得到一个。您可以在浏览器上按F12并确认实际提交的内容。因此,您的控制器代码只会丢失并再次呈现表单,而不是像往常那样重定向。
您可以使用readonly而不是禁用。这将使用户更难(但绝不是不可能)更改值,但仍然会发布。
最好的方法是在Symfony中定义表单时设置disabled属性。通过这样做,symfony将为您处理事情。在树枝上根本不需要额外的逻辑。但是,由于您希望基于实体中的值完成此操作,因此您需要使用表单事件系统来实现此功能。我不会在这里提供详细信息,因为我怀疑readonly会对您有用,但您可以在http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html找到更多信息
答案 1 :(得分:0)
刚刚添加了令牌,现在可以正常使用
this.AddInterceptor(new NVarcharInterceptor());