我有一个简单的FormType
附加到一个名为media
wich 我在我的视图中呈现的实体。我有一个newAction
可以创建对象的对象,一个editAction
可以让我在控制器中使用相同表单对其进行编辑的对象。但是,我不希望某些字段出现在我的edit
视图中,因为我在创建它时已经输入了它们。
但是,即使我form_row
过去专门逐行渲染我的表单,当我form_end
在最后添加时,它也会渲染我的所有字段,甚至是我没有调用的字段。
我的表单类型
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
在视图中显示我的字段,我没有调用它。所以我尝试了一些 hack 来解决它。
这个有效,但是当我单击submit
表单时,它显示了一个错误,即context
字段不能为空,所以这不起作用
{% do editForm.context.setRendered %}
我找到了一种使用 jQuery 来隐藏表单的方法
<script>
$(document).ready(function () {
$("#media_context").parent().hide();
});
</script>
jQuery 工作并在我的表单中隐藏我的行。但我想知道我是否可以在不使用 jQuery 的情况下做到这一点,并且只能在我的视图中呈现表单的特定字段?
在 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"
));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句