我想允许之前注册的候选人回到他的注册并添加(并且只)缺少文件。
这是我的观点
<form action="{{ path('candidat_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }}>
{% if ((entity.file2)==0)%}
{{ form_row(edit_form.file2, { 'label': 'file2' }) }}
{% endif %}
<p>
<button class="btn-small" type="submit">update</button>
</p>
</form>
点击按钮更新时,没有任何事情发生(没有重定向显示视图,没有上传)
我的控制器的updateAction:
public function updateAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('EtienneInscriptionBundle:Candidat')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Candidat entity.');
}
$deleteForm = $this->createDeleteForm($id);
$editForm = $this->createForm(new CandidatType(), $entity);
$editForm->bind($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('candidat_show', array('id' => $entity->getId())));
#return $this->redirect($this->generateUrl('candidat_edit', array('id' => $id)));
}
return array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
);
}
其中CandidateType包含最初生成create action上的每个字段的构建器(基于CRUD的控制器)
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name') ....etc...
关于什么是错的任何想法? 感谢名单
答案 0 :(得分:2)
在模板中过滤表单字段不是一个好主意。 更好的是在构建表单时使用选项。这是一个如何做到的例子,
1)设置条件以向表单添加字段
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('field_a', 'type');
// ...
if ($options['allow_edit_field_b']) {
$builder->add('field_b', 'text', array(
'property_path' => false,
));
}
// ...
2)定义您的选项,
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'allow_edit_field_b' => false,
));
}
3)建立你的表格,
$form = $this->createForm(new YourType(), $yourObject, array(
'allow_edit_field_b' => true,
));