我有一个简单的FormType
附加到一个media
在我看来呈现为wich 的实体。我有一个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"
));
}
Run Code Online (Sandbox Code Playgroud)
我的看法
{{ form_start(editForm) }}
{{ form_row(editForm.name) }}
{{ form_row(editForm.save) }}
{{ form_end(editForm) }}
Run Code Online (Sandbox Code Playgroud)
但是,即使我使用表单行,它实际上也会context
在视图中显示我的字段,而我没有调用它。因此,我尝试了一些解决方法。
这是可行的,但是当我单击submit
表单时,它向我显示了一个错误,即context
字段不能为null,因此无法解决问题
{% do editForm.context.setRendered %}
Run Code Online (Sandbox Code Playgroud)
我找到了一种使用jQuery来隐藏这样的表单的方法
<script>
$(document).ready(function () {
$("#media_context").parent().hide();
});
</script>
Run Code Online (Sandbox Code Playgroud)
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)
{
/...
}
}
Run Code Online (Sandbox Code Playgroud)
你不需要改变 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"
));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
986 次 |
最近记录: |