我有一个简单的FormType
附加到我在视图中呈现的名为media
的实体。
我有一个newAction
可以让我创建我的对象,还有editAction
可以让我在我的控制器中使用相同的表单编辑它。
但是,我不想在我的edit
视图中显示某个字段,因为我在创建它时已经输入了该字段。
但即使我使用form_row
逐行专门渲染我的表单,当我在最后添加form_end
时,它会渲染我的所有字段,即使是我没有的字段也是如此调用
我的FormType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', FileType::class, array(
'data_class' => null,
'label' => "Add an image"
))
->add('context', ChoiceType::class, array(
'label' => 'image section',
'choices' => array(
'header' => 'header',
'middle' => 'middle',
)
))
->add('save', SubmitType::class, array(
'label' => "Add"
));
}
我的观点
{{ form_start(editForm) }}
{{ form_row(editForm.name) }}
{{ form_row(editForm.save) }}
{{ form_end(editForm) }}
但即使我使用表单行,它实际上在视图中显示了我的context
字段,我没有调用它。
所以我尝试了一些黑客来解决它。
这个有效,但是当我点击submit
表单时,它会显示context
字段不能为空的错误,所以这并不能解决问题
{% do editForm.context.setRendered %}
我找到了一种方法来使用jQuery来隐藏这样的表单
<script>
$(document).ready(function () {
$("#media_context").parent().hide();
});
</script>
jQuery可以在我的表单中隐藏我的行。但我想知道我是否可以在不使用jQuery的情况下完成它并且能够在我的视图中仅渲染我的表单的特定字段?
答案 0 :(得分:3)
在Symfony 2中,您可以在编辑实体时从构建器中删除一些字段。您的编辑表单必须extends
您在Symfony 2中的创建表单。
我认为你可以在Symfony 3中做同样的事情,尝试类似:
class EditType extends CreateType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->remove('context') //remove the fields that no longer needed
}
public function configureOptions(OptionsResolver $resolver)
{
/...
}
}
您不需要更改CreateType
class Createtype extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', FileType::class, array(
'data_class' => null,
'label' => "Add an image"
))
->add('context', ChoiceType::class, array(
'label' => 'image section',
'choices' => array(
'header' => 'header',
'middle' => 'middle',
)
))
->add('save', SubmitType::class, array(
'label' => "Add"
));
}
}
答案 1 :(得分:2)
来自symfony docs:
除非将render_rest设置为false,否则此助手(form_end)也会输出form_rest()。
form_rest(视图,变量)
这将呈现尚未为给定表单呈现的所有字段。
this.setState
答案 2 :(得分:1)
试试这个
{{ form_start(editForm) }}
{{ form_row(editForm.name) }}
{{ form_row(editForm.save) }}
{{ form_end(editForm, {'render_rest': false}) }}