【问题标题】:Symfony change ChoiceType multiple expanded input nameSymfony 更改 ChoiceType 多个扩展输入名称
【发布时间】:2016-12-20 16:53:25
【问题描述】:

位置设为:

id    name        title
---   -----       ------
1     usa         United States of America
2     uk          United Kingdom
3     canada      Canada

我有一个 ** EntityType** 表单字段,名为 location

class OrderType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('location', EntityType::class, array(
            'class'        => Location::class,
            'choice_label' => 'title',
            'choice_name'  => 'name',
            'choice_value' => 'id',
            'multiple'     => true,
            'expanded'     => true,
            'data'         => array(
                'usa', 'canada'
            ),
        ));
    }
}

例如,我希望选中一些复选框(EntityTypemultiple=trueexpanded=true)(使用data 选项)。

我将choice_name 选项设置为位置名称,但name 表单字段属性没有改变。

HTML

<input type="checkbox" id="order_location_usa" name="order[location][]" value="1">
<input type="checkbox" id="order_location_uk" name="order[location][]" value="2">
<input type="checkbox" id="order_location_canada" name="order[location][]" value="3">

我错过了什么?

【问题讨论】:

  • 这里的问题是什么?设置默认值或更改输入名称?
  • 设置默认值(选中复选框),我认为可以使用数据选项来完成。 data 选项需要一个我认为的选项名称数组,不确定
  • 为了显示默认数据,我建议您使用绑定对象到表单而不是'data' 表单选项(这可以覆盖它)。但是,这应该适用于 Location 实例数组而不是字符串数组。
  • 故意不绑定到实体。我应该手动完成
  • 然后,您需要一个查询来获取这些(usecanada)位置作为实例并将它们放入数据选项。使用__toString()魔术方法显示默认标签,因此您可以删除choice_labelchoice_namechoice_value,因为EntityType能够知道在这种情况下您必须使用id

标签: symfony symfony-forms


【解决方案1】:

如果你可以传入一个实体,你可以这样做:

'choice_name' => function($location){
    return $location->getName();
}

否则,“名称”未定义,因此为空白。文档在这里:https://symfony.com/doc/current/reference/forms/types/entity.html#choice-name

所以choice_name 是可调用的(一个函数)。

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 2022-10-18
    • 1970-01-01
    • 2018-04-04
    • 2019-12-12
    • 2022-07-18
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多