如何为“创建”和“编辑”操作显示表单的特定字段 - Symfony3

鸡肉汉堡

我有一个简单的FormType附加到一个名为mediawich 我在我的视图中呈现的实体我有一个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony3错误登录表单

来自分类Dev

Symfony3:验证嵌套(可选)表单

来自分类Dev

Symfony3 QueryBuilder orderBy 实体字段

来自分类Dev

Symfony3服务和令牌存储

来自分类Dev

安全和登录-symfony3

来自分类Dev

Symfony3:如何设置多个连接?

来自分类Dev

Symfony3 - 如何验证 HTML 标签

来自分类Dev

特拉维斯(Travis)和Symfony3(Symfony3)

来自分类Dev

symfony3 对模型和管理表单的验证相同

来自分类Dev

Symfony3 表单类型和多对多关系

来自分类Dev

Symfony3表单类实体管理器

来自分类Dev

Symfony3:是否可以更改表单名称?

来自分类Dev

Symfony3在表单生成期间无法加载类型错误

来自分类Dev

保存表单后出现错误[Symfony3]

来自分类Dev

在 Symfony3 中自定义选择表单类型

来自分类Dev

Symfony3:填充对象数组的选择类型字段

来自分类Dev

Symfony3仅在添加对象时验证字段

来自分类Dev

symfony3教义2关联计数器字段

来自分类Dev

在 Symfony3 中创建实体管理器?

来自分类Dev

Symfony3 FOSOAuthServerBundle和Facebook或Google登录

来自分类Dev

Symfony3学说的findByDate按月和/或年筛选

来自分类Dev

Symfony3 FOSOAuthServerBundle和Facebook或Google登录

来自分类Dev

具有PHP7和Symfony3的MongoDB

来自分类Dev

特拉维斯(Travis)和Symfony3

来自分类Dev

symfony3树枝和表演会话数组

来自分类Dev

使用LiipImagineBundle和Symfony3找不到图像

来自分类Dev

如何在Symfony3中解析自动生成的类

来自分类Dev

在使用symfony3的树枝中,“ {%use%}”如何工作?

来自分类Dev

如何在Symfony3的FormType中发送参数?