【问题标题】:Symfony get onetomany entity values in form fieldSymfony 在表单字段中获取一个实体值
【发布时间】:2016-12-14 15:35:46
【问题描述】:

存在具有 ManyToMany 关系的 Service 和 Tag 实体。

  class Service {
       /**
        * @ORM\ManyToMany(targetEntity="Tag", mappedBy="serviceList",cascade={"persist"})
        */
       private $tagList;
  }

  class Tag{
        /**
         * @var string
         */
        private $name;

        /**
         * @ORM\ManyToMany(targetEntity="Service", inversedBy="tagList")
         * @ORM\JoinTable(name="tags_services")
         */
        private $serviceList;
 }

这里是服务类型

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', TextType::class, array(
            'label' => 'Title',
        ))
        ->add('tags', TextType::class, array(
            'label' => 'Tags',
            'mapped'   => false
        ))
    ;
}

在编辑服务实体时,如何在标签文本表单字段中获取以逗号分隔的服务标签名称?

例如,我有带有 tagList 的“数学导师”服务:“数学”、“导师”、“课程”。当我尝试对其进行编辑时,表单应如下所示:

 | title  |   Math tutor           | <- text field
 | tags   |   Math, Tutor, Lessons | <- text field

【问题讨论】:

    标签: symfony doctrine-orm many-to-many symfony-forms


    【解决方案1】:

    您应该使用 DataTransformer:http://symfony.com/doc/current/form/data_transformers.html

    这是一个简单案例的小例子:

    $builder->add('tags', TextType::class);
    
    $builder->get('tags')
            ->addModelTransformer(new CallbackTransformer(
                    function ($tagsAsArray) {
                        // transform the array to a string
                        return implode(', ', $tagsAsArray);
                    },
                    function ($tagsAsString) {
                        // transform the string back to an array
                        return explode(', ', $tagsAsString);
                    }
                ))
            ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多