【问题标题】:Symfony 2 : How to concatenate multiple fields into one in a formSymfony 2:如何将多个字段连接成一个表单
【发布时间】:2015-02-20 20:26:12
【问题描述】:

我在互联网上搜索了一种将多个字段连接成一个供用户输入的方法,然后在更新数据库之前分解。

我在一个学说实体具有以下字段的项目中工作:

/**
 * @var integer
 */
private $disponibilite;

/**
 * @var integer
 */
private $integrite;

/**
 * @var integer
 */
private $confidentialite;

/**
 * @var integer
 */
private $preuve;

这些整数中的每一个都应介于 1 和 5 之间。 实际上表格看起来像这样: 4 fields

我想要这样的东西: 1 field

我注意到 Symfony 提供了一个可以解决我的问题的工具:数据转换器。但我看不出他们怎么能负担得起从单个字段在数据库中插入 4 个值。

您知道自定义表单的另一种方法吗?

【问题讨论】:

  • 我会简单地寻找一个映射到假属性的文本字段,然后使用 setProperty 来划分字符串并设置正确的属性,并使用 getProperty 将 4 个属性连接成一个字符串

标签: php forms symfony


【解决方案1】:

你可以为你的类添加一个新属性,例如

private $singleField

/* a getter that builds up the unified value */    
public function getSingleField(){
  return $this->disponibilite.$this->integrite.$this->confidentialite.$this->preuve
} 


/* a setter that sets the properties by unified value */
public function setSingleField($value){

 $arr=str_split((string)$value);
 if(is_array($arr) && count($arr) == 3){

    $this->disponibilite = $arr[0];
    $this->integrite = $arr[1];
    ...

 }else{
   return false
 }

}

在您的表单构建器中,您只需添加属性“singleField”

【讨论】:

  • 如何验证数据?我在 YAML 中验证,但 Symfony 无法识别 singleField 属性。
  • 您可以在 setSingleField 函数中进行验证,所有属性(例如 disponsibilitie)的验证在您设置它们时仍然有效,因此如果您的任何属性无效,刷新时将失败
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2018-08-11
相关资源
最近更新 更多